2013-04-14 17 views
8

Projektuję skrypt, aby uruchomić proces wewnątrz nazwanej sesji ekranowej.Wysyłanie ctrl-c do konkretnej sesji ekranowej

as_user "screen -p 0 -S **$command** -X eval 'stuff \"wine LFS.exe /cfg=**$command**.cfg\"\015'" 

Więc bash myscript.sh start test stworzy test ekranu o nazwie i uruchomić test.cfg z oprogramowaniem.

Teraz chcę mój skrypt, aby uzyskać dostęp do określonej sesji ekranu i zrobić CTRL + C aby zatrzymać proces uruchomiony, więc może zabić sesję screen.

coś takiego:

as_user "screen -p 0 -S **$command** **... kill the process with ctrl-c...**" 
as_user "screen -p 0 -S **$command** -X eval 'stuff \"exit\"\015'" 

Odpowiedz

13

Nie bardzo rozumiem, ale wysłać ctrl-c do oknie w ekranem sesji:

screen -S session_name -X at window_number stuff $'\003' 
# or 
screen -S session_name -X -p window_number stuff $'\003' 

Jeśli chcesz wysłać coś do wszystkie okien, użyj # (musi być cytowany) jako window_number.

UPDATE:

stuff polecenia screen obsługuje również ^X (lub ^x) oznacza CTRL-X więc następujące polecenie może być również używany do wysyłania CTRL-C.

screen -S session_name -X at window_number stuff ^C 
+1

nie udało się uzyskać 'at' do pracy, ale ten pracował dla mnie tylko aktywnego okna, które mogą być przydatne dla kogoś:' screen -S nazwa_sesji -X rzeczy $ '\ ekranem 003'' –

+0

' -S nazwa_sesji -X w "#" stuff $ '\ 003'' z 'screen -S nazwa_sesji -X quit' działa idealnie dla mnie. Mogę teraz zabić każdą sesję screenową. Dziękuję Ci. – puchu