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

21

Я пытаюсь создать команду, которая запускает screen, создает четыре сессии с разными именами и запускает четыре разные команды.

Я знаю, как сделать это вручную:

1. screen
2. ./command1 args
3. CTRL-A :sessionname Session 1
4. CTRL-A C
5. (GOTO 2)

Могу ли я сделать это с помощью сценария Bash или что-то? Как бы я это сделал?

Hughes
источник

Ответы:

15

screen -dmS "$SESSION_NAME" "$COMMAND" "$ARGUMENTS"появится экран, работающий $COMMANDв фоновом режиме.

Вы можете видеть активные сеансы с screen -lsи присоединить с screen -r "$SESSION_NAME".

Мертвые сессии могут быть убиты с screen -wipe.

LawrenceC
источник
Это делает работу!
Хью
1
Эта команда создает новый сеанс экрана для каждой команды. Его нельзя использовать для создания сеанса одного экрана, содержащего одно окно для каждой команды (как это делают ручные шаги в вопросе). Таким образом, он не отвечает на вопрос, и .screenrcвместо этого следует принять ответ ниже.
Тей»
Есть ли какое-то реальное преимущество для multi-windows-one-session, если все, что вы делаете, это хотите дешево поддерживать что-то в фоновом режиме?
Лоуренс
29

Чтобы запустить несколько сеансов автоматически, настройте .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.

sleske
источник
5

Вы можете использовать опции d, m, S вместе:

screen -Sdm s1
screen -Sdm s2
screen -Sdm s3

S: создать экран

d: отсоединиться от экрана

m: для принудительного создания экрана независимо от того, вызывается ли экран из другого экрана или нет.

aliasav
источник
3
Интересно, что вы можете писать так, а не screen -dmS s1и т. Д. Я не знал, что при группировке параметров аргумент не обязательно должен быть последним.
Томаш Гандор