Используя 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"