Как автоматически запускать несколько сеансов экрана?

Как автоматически запускать несколько сеансов экрана?

Я пытаюсь создать команду, которая запускает 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 Я получаю напоминание... если запустить его изнутри экрана, он добавит озаглавленные окна для каждого запуска скрипта.

Связанный контент