2

Используя screenrc, как я могу заставить C-a c открыть новое окно в рабочем каталоге текущего окна? По умолчанию создается впечатление, что оно открывает новое окно в рабочем каталоге во время вызова исходного сеанса экрана.

3 ответа3

7

По умолчанию screen также связывает C-a C-c для создания нового окна, так что вы можете добавить еще одну строку в .screenrc для обработки этого случая:

bind c stuff "screen -X chdir \$PWD;screen^M"
bind ^c stuff "screen -X chdir \$PWD;screen^M"

Разъяснение о том, как работает эта команда:

  1. stuff помещают свою строку аргумента непосредственно в текущее окно:

    Команда: stuff string

    Наполните string в буфере ввода текущего окна.

  2. screen -X chdir \$PWD указывает экрану выполнить команду chdir , которая меняет свой рабочий каталог (с которого начинаются новые окна экрана) на переменную среды $PWD , которая содержит текущий рабочий каталог. Это невозможно сделать только внутри .screenrc ; поэтому, манипулирование входным буфером с stuff необходимо.

  3. Команда screen в уже запущенном screen создает новое окно, как C-a C-c .

  4. ^M генерирует возврат каретки, который говорит оболочке выполнить команду, которая сейчас находится в буфере. Без него вам пришлось бы нажать enter (или C-m , конечно).

Следовательно, эта привязка оставит такую ерунду в окне, в котором вы ее выполняете:

user@host:~/directory$ screen -X chdir $PWD;screen
user@host:~/directory$
0

Исходя из этого ответа SO, я думаю, что это должно работать:

bind c stuff "screen -X chdir \$PWD; screen^M"

Я пойду попробую это на моей удаленной оболочке и сообщу, работает ли она для меня.

редактировать: Да, это работает. Первая команда "связать" на самом деле не нужна.

0

Вот копия моего собственного ответа на аналогичный вопрос на stackoverflow.com:

Чтобы экран открывал новую вкладку / окно в текущем каталоге, вы можете добавить следующий код в ваш файл .screenrc :

bind c stuff "screen bash^M"

Это приведет к тому, что команда Ctrl + a c откроет новые вкладки / окна в каталоге текущего окна / вкладки.

Примечание. Необходимо убедиться, что screen по умолчанию не запускает оболочку входа в систему , поскольку это приведет к запуску оболочки в каталоге по умолчанию для оболочки входа в систему, а не в текущем каталоге. Это означает, что в вашем файле .screenrc ваша команда shell не может содержать символ тире ('-').

Например, это неправильно (то есть запускается оболочка входа):

shell -$SHELL

Но это правильно (т.е. он не запустит оболочку входа):

shell $SHELL

Примечание 2: К сожалению, этот метод не работает точно так же, как команда по умолчанию для нового окна / вкладки на screen . Вместо этого он записывает команду в текущее окно и выполняет ее для создания нового окна / вкладки, поэтому она не будет работать во время какого-то длительного процесса оболочки. Другими словами, это сочетание клавиш может быть выполнено только тогда, когда могут выполняться обычные команды оболочки.

Примечание 3: Если вы хотите, чтобы screen открывал новые окна / вкладки в текущем каталоге и открывал оболочку входа в систему , вы можете добавить следующий код в ваш файл .screenrc :

bind c stuff "screen bash -l^M"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .