Подтвердить что ты не робот

Как заставить GNU Screen запускать новое окно в рабочем каталоге CURRENT?

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

4b9b3361

Ответ 1

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

chdir /home/dan/newscreendir
screen

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

См. страницу руководства gnu screen, она достаточно полная.

Команда экрана chdir

Экран не может получить доступ к вашей переменной оболочки или выполнить команды обратного вывода. Ближе всего я могу сделать это одним щелчком мыши с небольшим 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"