GNU-Bildschirm: Kann Befehle nur dann ausführen, wenn der Bildschirm angehängt ist?

10

Ich habe das folgende Skript

screen -d -m -S $1                #start screen minimized
screen -S $1 -X stuff "$beast     
"                                 #stuff commands

Wenn ich den Bildschirm nicht zuerst anbringe, scheinen die Auswirkungen von Dingen nichts zu bewirken. Warum ist das so und wie kann ich dieses Skript ändern, damit ich den Bildschirm nicht anhängen muss?

Herzogvin
quelle

Antworten:

14

Wenn Sie eine Bildschirmsitzung im getrennten Modus ( screen -d -m) starten , wird kein Fenster ausgewählt, sodass später gesendete Eingaben screen -X stuffeinfach verloren gehen. Sie müssen explizit angeben, dass Sie die Tastenanschläge an Fenster 0 ( -p 0) senden möchten . Dies ist ohnehin eine gute Idee, falls Sie aus irgendeinem Grund andere Fenster in dieser Bildschirmsitzung erstellen.

screen -S "$1" -p 0 -X stuff "$beast$(printf \\r)"

( printf \\rum den ReturnSchlüssel streng zu emulieren ; viele, aber nicht alle Programme akzeptieren einen Zeilenumbruch ( \n).)

Gilles 'SO - hör auf böse zu sein'
quelle
Vielen Dank! es funktioniert perfekt. Tut mir leid, dass alle nicht zum Thema gehören
dukevin
funktioniert bei mir nicht
Tanner Strunk
2

Dies ist kürzlich beim Versuch aufgetreten, eine Frage auf unix.stackexchange.com zu beantworten .

Die Zusammenfassung ist , dass Bildschirm hat keinen Standard ausgewählte Fenster , wenn Sie attatch, aber Gilles hat uns gezeigt , wie man eine ausgewählt werden erzwingen , indem Sie das Argument -p 0zu Ihrem Bildschirm - Befehl.

Persönlich empfehle ich zu wechseln tmux. So würden Sie Ihre Bildschirmbefehle für die Arbeit in tmux portieren:

tmux new-session -d -n $1
tmux send-keys -t $1 "$beast\n"
Caleb
quelle