Используя screenrc, как я могу заставить `Ca c` открывать новое окно в рабочем каталоге текущего окна?
Используя screenrc, как я могу сделать C-a c
открыть новое окно в рабочем каталоге текущего окна? По умолчанию создается впечатление, что оно открывает новое окно в рабочем каталоге во время вызова исходного сеанса экрана.
3 ответа
Исходя из этого ответа SO, я думаю, что это должно работать:
bind c stuff "screen -X chdir \$PWD; screen^M"
Я попробую это сделать на своей удаленной оболочке и сообщу, работает ли она для меня.
редактировать: Да, это работает. Первая команда "связать" на самом деле не нужна.
По умолчанию, 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$
Вот копия моего собственного ответа на аналогичный вопрос на 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"