Я пытаюсь создать команду, которая запускает screen
, создает четыре сеанса с разными именами и запускает четыре разные команды.
Я знаю, как это сделать вручную:
1. screen
2. ./command1 args
3. CTRL-A :sessionname Session 1
4. CTRL-A C
5. (GOTO 2)
Могу ли я сделать это с помощью скрипта bash или чего-то еще? Как это сделать?
решение1
screen -dmS "$SESSION_NAME" "$COMMAND" "$ARGUMENTS"
создаст экран, работающий $COMMAND
в фоновом режиме.
Вы можете просмотреть активные сеансы с помощью screen -ls
и повторно подключиться с помощью screen -r "$SESSION_NAME"
.
Мертвые сеансы можно завершить с помощью screen -wipe
.
решение2
Для автоматического запуска нескольких сеансов настройте .screenrc
файл, файл конфигурации для экрана. В нем вы можете создавать сеансы, запускать программы, изменять рабочий каталог и т. д. Я использую его для инициализации сеанса экрана.
Простой пример для файла .screenrc:
# don't display the copyright page
startup_message off
# increase scrollback buffer size
defscrollback 10000
# create windows
screen -t TODO vim TODO.txt
chdir src
screen -t coding vim main.c
screen -t run
Каждая из команд screen
выше создает один сеанс экрана. -t
Задает заголовок сеанса; остальная часть строки — это команда для запуска и ее параметры.
Таким образом, первая и вторая screen
строки начинают сеанс и запускают vim
внутри. Третья просто начинает сеанс и выкидывает вас в командную строку. chdir
изменяет рабочий каталог для всех последующих сеансов.
Если вам нужно несколько .screenrc
файлов, просто назовите их любым удобным вам способом и выберите один с расширением screen -c myscreenrc
.
решение3
Вы можете использовать опции d, m, S вместе:
screen -Sdm s1
screen -Sdm s2
screen -Sdm s3
S: Создать экран
d : отсоединиться от экрана
m : Для принудительного создания экрана независимо от того, вызывается ли экран из другого экрана или нет.
решение4
У меня много случаев, когда мне нужно открыть набор хостов для исследования или поддержки. Поскольку мне нужны эти дополнительные окна только изредка, я решил использовать скрипт оболочки вместо .screenrc
подхода.
например в ~/bin/prod_support:
#!/bin/bash
if [[ ! -z "$STY" ]]; then
screen -t "hosta" ssh hosta
screen -t "hostb" ssh hostb
else
echo "start up screen first"
fi
Если запустить изнеэкранированныйshell Я получаю напоминание... если запустить его изнутри экрана, он добавит озаглавленные окна для каждого запуска скрипта.