Jak uruchomić drugie polecenie w tej samej sesji ekranowej

12

Uruchamiam pierwsze polecenie na ekranie w następujący sposób:

screen -d -m -S testen -t lalala watch df -h

co daje mi sesję ekranu działającą w tle i mogę ponownie połączyć się później.

Jak mogę uruchomić drugie polecenie w nowym oknie w tej samej sesji ekranowej?

TTM
źródło

Odpowiedzi:

11

Rozpocznij nazwaną sesję screen ( -S) z nazwanym window ( -t) dostosowującym się do rozmiaru terminala ( -A) w trybie odłączonym ( -d -m):

screen -S mySessionName -t myWinName0 -A -d -m

Uruchom inne nazwane okno ( -t) w tej samej sesji ekranowej ( -S):

screen -S mySessionName -X screen -t myWinName2

Włóż kilka poleceń ( -X stuff $'cmds') do pierwszego okna o nazwie ( -p) w sesji ( -S):

screen -S mySessionName -p myWinName0 -X stuff $'echo myWinName0\necho cmd1\necho cmd2\n'

Włóż kilka poleceń ( -X stuff $'cmds') do drugiego okna o nazwie ( -p) w sesji ( -S):

screen -S mySessionName -p myWinName1 -X stuff $'echo myWinName1\necho cmd1\necho cmd2\n'

Wymień sesje ekranowe i podłącz ponownie, aby zobaczyć, co się stało:

screen -ls
screen -r mySessionName

Uwaga: Linefeed ( \n) symuluje naciśnięcie Enter. Możesz także użyć średników do oddzielenia poleceń.

pocztowy
źródło
Nie musisz robić „rzeczy”. screen -S sessionName -t windowName1 -Adm <command> && screen -S sessionName -X screen -t windowName2 -Adm <command2>
Lotus,
4

Ekran wewnętrzny:

  • Ctrl-A, caby otworzyć nowe okno powłoki
  • Ctrl-A, :screen newcmdaby biegaćnewcmd

Na zewnątrz:

screen -X testen "screen newcmd"
użytkownik1686
źródło
cześć grawitacja , wiem o tym, ale chciałbym to zrobić ze skryptu inicjującego. w zasadzie chcę uruchomić 2 polecenia w osobnych oknach w tej samej sesji ekranowej. do zobaczenia
1
@bob: patrz przykład nr 3 „Ekran zewnętrzny” w tej odpowiedzi.
user1686
cześć grawitacja, screen -S testen -X 'screen echo "hi"'nie działa.
Nie udało mi się również uruchomić metody -X. Fwiw, mój ekran -v mówi „Wersja ekranu 4.00.03 (FAU) 23-paź-06”
Lauri Lehtinen,
4

Próbowałem powyższego podejścia, ale drugie polecenie nie wykonało się w drugim oknie. Lekko zmieniłem przykład, używając numeru okna zamiast nazwy okna:

  1. utwórz sesję

    screen -S mySessionName -t 0 -A -d -m
    
  2. utwórz drugie okno

    screen -S mySessionName -X screen -t 1
    
  3. wyślij polecenie do pierwszego okna

    screen -S mySessionName -p 0 -X stuff $'echo myWinName0\necho cmd1\necho cmd2\n'
    
  4. wyślij polecenie do drugiego okna

    screen -S mySessionName -p 1 -X stuff $'echo myWinName0\necho cmd1\necho cmd2\n'
    
  5. teraz sprawdź, czy polecenie zostało uruchomione w pierwszym oknie

    screen -R mySessionName -p 0
    
  6. teraz sprawdź, czy polecenie zostało uruchomione w drugim oknie

    screen -R mySessionName -p 1
    

Testowane z ekranem 4.00.03 (CENTOS 6.3 x64).

Bas van Beek BVB Media
źródło
1

Możesz ustawić alternatywny plik .screenrc za pomocą -cargumentu. W tym nowym screenrc możesz skonfigurować wiele poleceń, które będą uruchamiane po zainicjowaniu sesji ekranu.

Na końcu tego alternatywnego pliku .screenrc umieść następujące polecenia:

screen 1 cmd1 args
screen 2 cmd2 args

Nie musisz konfigurować alternatywnego pliku konfiguracyjnego, jeśli planujesz uruchomić tylko jeden typ sesji ekranu, a domyślne polecenia są zawsze w porządku.

Darren Hall
źródło