Jak mogę automatycznie rozpocząć wiele sesji ekranowych?

19

Próbuję zbudować polecenie, które uruchamia się screen, tworzy cztery sesje o różnych nazwach i uruchamiam cztery różne polecenia.

Wiem, jak to zrobić ręcznie:

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

Czy mogę to zrobić za pomocą skryptu bash lub czegoś takiego? Jak mam to zrobić?

ściska
źródło

Odpowiedzi:

14

screen -dmS "$SESSION_NAME" "$COMMAND" "$ARGUMENTS"odrodzi się ekran działający $COMMANDw tle.

Możesz zobaczyć aktywne sesje z screen -lsi połączyć się ponownie screen -r "$SESSION_NAME".

Martwe sesje można zabić screen -wipe.

LawrenceC
źródło
Wykonuje pracę!
przytula
To polecenie tworzy nową sesję ekranu dla każdego polecenia. Nie można go użyć do utworzenia pojedynczej sesji ekranowej zawierającej jedno okno dla każdego polecenia (tak jak robią to ręczne kroki w pytaniu). Dlatego nie odpowiada na pytanie, a .screenrczamiast tego należy przyjąć odpowiedź poniżej.
Tey '27
czy jest jakaś realna zaleta dla sesji z wieloma oknami, jeśli wszystko, co chcesz, to tanio utrzymać coś w tle?
LawrenceC
27

Aby automatycznie rozpocząć wiele sesji, skonfiguruj .screenrcplik, plik konfiguracyjny dla ekranu. Można w nim tworzyć sesje, uruchamiać programy, zmieniać działający katalog itp. Używam go do inicjowania sesji ekranowej.

Prosty przykład dla pliku .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 

Powyższe screenpolecenia tworzą jedną sesję ekranu. -tustawia tytuł sesji; reszta linii to polecenie do uruchomienia i jego parametry.

Tak więc pierwsza i druga screenlinia rozpoczynają sesję i uruchamiają się vimwewnątrz. Trzeci po prostu rozpoczyna sesję i wysyła cię po monicie. chdirzmienia katalog roboczy dla wszystkich kolejnych sesji.

Jeśli chcesz mieć wiele .screenrcplików, po prostu nazwij je w dowolny sposób i wybierz jeden za pomocą screen -c myscreenrc.

Śleske
źródło
5

Możesz używać jednocześnie opcji d, m, S:

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

S: Aby utworzyć ekran

d: odłączyć od ekranu

m: Aby wymusić utworzenie ekranu, niezależnie od tego, czy ekran jest wywoływany z innego ekranu, czy nie.

aliasav
źródło
3
Interesujące, że możesz tak napisać, zamiast screen -dmS s1itd. Nie wiedziałem, że przy grupowaniu opcji ta z argumentem nie musi być ostatnia.
Tomasz Gandor