По умолчанию, когда вы создаете новое окно в GNU Screen, оно запускается в каталоге, в котором вызывается Screen. Я хочу запустить новое окно в GNU Screen в текущем рабочем каталоге окна, в котором я сейчас нахожусь. Как я могу это сделать?
Как я могу заставить GNU Screen запускать новое окно в ТЕКУЩЕМ рабочем каталоге?
Ответы (8)
См. Команду GNU Screen chdir
. Все новые окна, созданные в Screen, используют его в качестве исходного каталога. Используя это, вы можете сделать что-то вроде:
chdir /home/dan/newscreendir
screen
И ваше новое окно (вместе с любыми будущими созданными окнами) будет в заданном каталоге. Если это всегда будет текущий рабочий каталог, вы можете настроить что-то в своем screenrc
, чтобы сделать это одной командой.
См. страницу руководства GNU Screen. Это довольно обширно.
Screen не может получить доступ к вашей переменной оболочки или выполнить команды с обратными кавычками. Ближе всего к тому, чтобы сделать это за один клик, я могу использовать небольшой сценарий Bash, подобный этому:
screen -X setenv currentdir `pwd`
screen -X eval 'chdir $currentdir' screen
Или более компактно:
screen -X eval "chdir $PWD"
screen -X
отправляет команду в текущий сеанс Screen. Первая строка создает переменную с именем currentdir
. Вторая строка отправляет currentdir
команде chdir
, а затем создает новое окно экрана.
.screenrc
, верно? Вторая часть для командной строки?
- person dlamblin; 10.08.2012
Простое решение - поместить следующие строки в ваш файл ~ / .screenrc, а затем использовать Ctrl + X для открытия новых окон:
bind ^x
bind ^x stuff "screen -X chdir \$PWD;screen^M"
http://www.michaelkelleher.info содержит больше советов для средних / продвинутых пользователей экрана, но поскольку этот сайт кажется чтобы уйти, вы можете найти его архив в Личный веб-сайт Майкла Келлехера на Archive.org.
Я не нашел никакого решения, которое сработало бы, если у вас уже был процесс, запущенный в окне, поэтому я придумал свою собственную идею. Я добавил следующие строки в свой .bash_profile a> файл:
scr_cd()
{
cd $1
screen -X chdir $PWD
}
if [ "$TERM" == 'screen' ]; then
alias cd=scr_cd
fi
Рабочий каталог экрана обновляется каждый раз, когда вы меняете каталог. Кому-то такой подход может не понравиться, но он работает как шарм.
Возможно, это характерно для Byobu, но при простом вводе screen
открывается новое окно в Текущий каталог.
Чтобы 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"
Вы также можете запустить:
screen -X eval "chdir $(pwd)"
Или, если вы хотите открыть новое окно, как только вы установите chdir, используйте:
screen -X eval "chdir $(pwd)" screen
У меня есть почти идеальное решение для Bash. :)
Если вы никогда не используете
password
для установки пароля экрана блокировки, просто добавьте его в файл$HOME/.bash_profile
:export PROMPT_COMMAND='screen -p $WINDOW -X chdir "$PWD"'
Вам нужен пароль? С этим:
# 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
.
В вашем .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]