По умолчанию при создании нового окна на экране GNU он запускается в каталоге, в котором вызывается экран. Я хочу запустить новое окно на экране GNU в текущем рабочем каталоге окна, в котором я сейчас. Как это сделать? Благодарю!
Как заставить GNU Screen запускать новое окно в рабочем каталоге CURRENT?
Ответ 1
См. команду gnu screen chdir. Все новые окна, созданные на экране, используют это как их исходный каталог. Используя это, вы можете сделать что-то вроде
chdir /home/dan/newscreendir
screen
И ваше новое окно (вместе с любыми будущими созданными окнами) будет находиться в каталоге set. Если это всегда будет текущий рабочий каталог, вы можете установить что-то на своем экране, чтобы сделать это в одной команде.
См. страницу руководства gnu screen, она достаточно полная.
Экран не может получить доступ к вашей переменной оболочки или выполнить команды обратного вывода. Ближе всего я могу сделать это одним щелчком мыши с небольшим bash script следующим образом
screen -X setenv currentdir `pwd`
screen -X eval 'chdir $currentdir' screen
или более компактно
screen -X eval "chdir $PWD"
"screen -X" отправляет команду на текущий сеанс экрана. Первая строка создает переменную с именем currentdir. Вторая строка отправляет currentdir команде chdir, а затем создает новое окно экрана.
Ответ 2
Простое решение состоит в том, чтобы поместить следующие строки в ~/.screenrc, а затем мы C-x, чтобы открыть новые окна:
bind ^ x
bind ^ x stuff "screen -X chdir\$PWD; screen ^ M"
http://www.michaelkelleher.info содержит больше советов для пользователей промежуточного/расширенного экрана.
Поскольку этот сайт, похоже, ушел, вы можете найти его здесь: Персональный сайт Michael Kelleher на Archive.org
Ответ 3
Я не нашел решения, которое могло бы работать, когда у вас уже есть процесс, запущенный в окне, поэтому я придумал свою собственную идею. Я добавил следующие строки в мой .bash_profile:
scr_cd()
{
cd $1
screen -X chdir $PWD
}
if [ "$TERM" == 'screen' ]; then
alias cd=scr_cd
fi
Рабочий каталог экрана обновляется каждый раз при изменении каталога. Кому-то может не понравиться этот подход, но он работает как шарм.
Ответ 4
Возможно, это специфично для Byobu, но просто ввод screen
открывает новое окно в текущем каталоге.
Ответ 5
В .screenrc
введите строку, использующую команду chdir
, если вы хотите, чтобы она была одинаковой каждый раз.
Если в сеансе есть сеанс сеанса работы, вы можете ввести:
screen -X chdir [arg]
Без аргумента это будет ваш домашний каталог, тот же результат, что и набрав cd
.
Если у вас есть script (это программирование q & site) или находятся за пределами экрана и экрана, вы можете выполнить:
`which screen` -x -X chdir [arg]
Что вы, скорее всего, последуете за запуском какого-либо нового процесса на экране с помощью:
`which screen` -x -X screen [command to run in that dir] [args for the command]
Я еще не нашел способ узнать, что это было и изменить его (в script), поэтому, если кто-то захочет обновить этот ответ, пожалуйста, сделайте.
Ответ 6
Вы также можете запустить:
screen -X eval "chdir $(pwd)"
Или если вы хотите запустить новое окно, как только вы установите chdir, используйте:
screen -X eval "chdir $(pwd)" screen
Ответ 7
У меня есть почти идеальное решение для 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"'
Надеемся, что разработчики экрана добавят переменную окружения PWD
как можно скорее.
Ответ 8
Чтобы открыть экран новой вкладке/окну в текущем каталоге, вы можете добавить следующий код в свой файл .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"