Как я могу заставить GNU Screen запускать новое окно в ТЕКУЩЕМ рабочем каталоге?

По умолчанию, когда вы создаете новое окно в GNU Screen, оно запускается в каталоге, в котором вызывается Screen. Я хочу запустить новое окно в GNU Screen в текущем рабочем каталоге окна, в котором я сейчас нахожусь. Как я могу это сделать?


person Rio    schedule 04.10.2009    source источник


Ответы (8)


См. Команду GNU Screen chdir. Все новые окна, созданные в Screen, используют его в качестве исходного каталога. Используя это, вы можете сделать что-то вроде:

chdir /home/dan/newscreendir
screen

И ваше новое окно (вместе с любыми будущими созданными окнами) будет в заданном каталоге. Если это всегда будет текущий рабочий каталог, вы можете настроить что-то в своем screenrc, чтобы сделать это одной командой.

См. страницу руководства GNU Screen. Это довольно обширно.

Экранная команда chdir

Screen не может получить доступ к вашей переменной оболочки или выполнить команды с обратными кавычками. Ближе всего к тому, чтобы сделать это за один клик, я могу использовать небольшой сценарий Bash, подобный этому:

screen -X setenv currentdir `pwd`
screen -X eval 'chdir $currentdir' screen

Или более компактно:

screen -X eval "chdir $PWD"

screen -X отправляет команду в текущий сеанс Screen. Первая строка создает переменную с именем currentdir. Вторая строка отправляет currentdir команде chdir, а затем создает новое окно экрана.

person Dan Midwood    schedule 04.10.2009
comment
Ха-ха, вчера я пробовал проголосовать за ваш ответ, и он сказал, что мне нужно 15 репутации. Затем я попробовал это снова сегодня и просто заметил пустую галочку под этим ... думаю, ребята из StackOverflow должны где-то намекнуть: | в любом случае, большое спасибо! :) - person Rio; 10.10.2009
comment
@DanMidwood Первая часть вашего ответа для .screenrc, верно? Вторая часть для командной строки? - person dlamblin; 10.08.2012
comment
@dlamblin Первая часть моего ответа просто настроена для оставшейся части, эти команды не нужно никуда помещать. Но, отвечая на ваш вопрос, они имеют формат, соответствующий формату .screenrc. - person Dan Midwood; 11.08.2012
comment
@dlamblin Если вы хотите это сделать, я бы посоветовал взять ответ Майка, он делает то же самое, но более аккуратно. stackoverflow.com/a/3282023/119768 - person Dan Midwood; 11.08.2012

Простое решение - поместить следующие строки в ваш файл ~ / .screenrc, а затем использовать Ctrl + X для открытия новых окон:

bind ^x

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

http://www.michaelkelleher.info содержит больше советов для средних / продвинутых пользователей экрана, но поскольку этот сайт кажется чтобы уйти, вы можете найти его архив в Личный веб-сайт Майкла Келлехера на Archive.org.

person Mike    schedule 19.07.2010
comment
Если вы собираетесь использовать 'stuff', вам не нужен 'chdir': bindkey ^ x stuff screen ^ M (с буквальным '^ M' там) делает то, что необходимо. Единственный недостаток заключается в том, что он оставляет дополнительную команду в оболочке любого окна, в котором вы ее используете, но я думаю, это небольшая цена. Я сам сейчас использую это решение. - person Joseph; 01.07.2011
comment
Решение Майка, похоже, не работает, когда в текущем открытом окне работает vim. Любые идеи приветствуются. - person Covi; 12.02.2016


Возможно, это характерно для Byobu, но при простом вводе screen открывается новое окно в Текущий каталог.

person nth    schedule 15.08.2013

Чтобы Screen открывал новую вкладку / окно в текущем каталоге, вы можете добавить следующий код в свой файл .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"
person stiemannkj1    schedule 20.10.2015

Вы также можете запустить:

screen -X eval "chdir $(pwd)"

Или, если вы хотите открыть новое окно, как только вы установите chdir, используйте:

screen -X eval "chdir $(pwd)" screen
person Eman    schedule 30.01.2013

У меня есть почти идеальное решение для Bash. :)

  1. Если вы никогда не используете password для установки пароля экрана блокировки, просто добавьте его в файл $HOME/.bash_profile :

     export PROMPT_COMMAND='screen -p $WINDOW -X chdir "$PWD"'
    
  2. Вам нужен пароль? С этим:

     # The digest of password "abc" is ID1wIq4l2t7s6
     export PROMPT_COMMAND='screen -p $WINDOW -X eval "password none" "chdir \"$PWD\"" "idle 0 password ID1wIq4l2t7s6"'
    

Я просто надеюсь, что разработчики Screen как можно скорее добавят переменную окружения PWD.

person V.D.D    schedule 06.12.2013

В вашем .screenrc файле добавьте строку, в которой используется команда chdir, если вы хотите, чтобы каждый раз повторялась одна и та же.

Если у вас есть запущенный сеанс Screen внутри этого сеанса, вы можете ввести:

screen -X chdir [argument]

Без аргумента это будет ваш домашний каталог, тот же результат, что и при вводе cd.

Если у вас есть сценарий (это сайт вопросов и ответов по программированию) или вы находитесь за пределами Screen и Screen запущен, вы можете выполнить:

`which screen` -x -X chdir [argument]

За чем вы, вероятно, последуете, запустив новый процесс в Screen с помощью:

`which screen` -x -X screen [command to run in that directory] [arguments for the command]
person dlamblin    schedule 10.08.2012