Используя screenrc, как я могу заставить C-a c
открыть новое окно в рабочем каталоге текущего окна? По умолчанию создается впечатление, что оно открывает новое окно в рабочем каталоге во время вызова исходного сеанса экрана.
3 ответа
По умолчанию screen
также связывает C-a C-c
для создания нового окна, так что вы можете добавить еще одну строку в .screenrc
для обработки этого случая:
bind c stuff "screen -X chdir \$PWD;screen^M"
bind ^c stuff "screen -X chdir \$PWD;screen^M"
Разъяснение о том, как работает эта команда:
stuff
помещают свою строку аргумента непосредственно в текущее окно:Команда:
stuff string
Наполните
string
в буфере ввода текущего окна.screen -X chdir \$PWD
указывает экрану выполнить командуchdir
, которая меняет свой рабочий каталог (с которого начинаются новые окна экрана) на переменную среды$PWD
, которая содержит текущий рабочий каталог. Это невозможно сделать только внутри.screenrc
; поэтому, манипулирование входным буфером сstuff
необходимо.Команда
screen
в уже запущенномscreen
создает новое окно, какC-a C-c
.^M
генерирует возврат каретки, который говорит оболочке выполнить команду, которая сейчас находится в буфере. Без него вам пришлось бы нажатьenter
(илиC-m
, конечно).
Следовательно, эта привязка оставит такую ерунду в окне, в котором вы ее выполняете:
user@host:~/directory$ screen -X chdir $PWD;screen
user@host:~/directory$
Исходя из этого ответа SO, я думаю, что это должно работать:
bind c stuff "screen -X chdir \$PWD; screen^M"
Я пойду попробую это на моей удаленной оболочке и сообщу, работает ли она для меня.
редактировать: Да, это работает. Первая команда "связать" на самом деле не нужна.
Вот копия моего собственного ответа на аналогичный вопрос на 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"