2013-04-14 17 views
8

Ich entwerfe ein Skript, um einen Prozess innerhalb einer benannten Bildschirmsitzung zu starten.Senden von ctrl-c an bestimmte Bildschirmsitzung

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

So bash myscript.sh start test wird ein Bildschirm mit dem Namen Test erstellen und die test.cfg mit der Software laufen.

Jetzt möchte ich mein Skript den spezifischen Bildschirm-Sitzung zugreifen und machen einen CTRL +C den laufenden Prozess zu stoppen, so kann ich den Bildschirm Sitzung töten.

Etwas wie folgen aus:

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'" 

Antwort

13

Ich verstehe nicht ganz, aber Sie ctrl-c zu einem Fenster in einer Bildschirm Sitzung senden:

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

Wenn Sie senden möchten etwas zu alle die Fenster, verwenden Sie # (muss zitiert werden) als window_number.

UPDATE:

von Screen stuff Befehl unterstützt auch ^X (oder ^x) bedeuten CTRL-X so der folgende Befehl kann auch senden CTRL-C verwendet werden.

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

konnte nicht erhalten 'at' zu arbeiten, aber das funktionierte nur für mich für das aktive Fenster, die für jemanden nützlich sein könnte:' screen -S session_name -X Sachen $ '\ 003'' –

+0

'screen -S Sitzungsname -X bei "#" stuff $ '\ 003'' mit 'Bildschirm -Session_name -X quit' funktioniert perfekt für mich. Ich kann jetzt jede Bildschirmsitzung beenden. Vielen Dank. – puchu