Befehl an eine bereits laufende Bildschirmsitzung senden

21340
Der Hochstapler

Ich habe versucht, Befehle an eine laufende gnu-Bildschirmsitzung (4.00.03) in opensolaris zu senden, kann jedoch keine Befehle durch eine Kombination von ausführen screen -X

Ok, ich starte eine Bildschirmsitzung mit screen -S testund versuchte dann screen -r -X "date", mir das Datum zu zeigen, an dem ich mich wieder verbinde. Es ist jedoch weder eine Fehlermeldung noch eine Ausgabe auf dem Bildschirm aufgetreten. Ich habe es mit so vielen Kombinationen versucht, dass ich mich nicht erinnern kann.

Irgendwelche Tipps, wie man das erreichen kann?

Der Grund, warum ich das mache, ist, weil ich ein Programm habe, das nicht als Dämon kommt, und ich möchte es in einer Bildschirmsitzung starten, sodass ich später sehen kann, was los ist.

9
es scheint, als ob dieser "Befehl", über den sie in den Manpages sprechen, für einen Bildschirmbefehl gedacht ist, wie Einstellungen für die Bildschirmsitzung selbst. Anstatt Befehle für die Shell zu senden, die in der Bildschirmsitzung geöffnet wird. Also, jemandem eine Idee, wie man es mit einem Bash-Skript realisieren kann? vor 14 Jahren 0
@Axon: Ja, -X sendet Bildschirmbefehle, keine Shellbefehle, aber Bildschirm hat einen Befehl 'Bildschirm', der neue Bildschirmfenster öffnen kann. vor 14 Jahren 0

3 Antworten auf die Frage

17
thegatekeeper

Eigentlich ist es ganz einfach. Sie können Folgendes verwenden:

screen -S sessionname -X stuff 'command'`echo -ne '\015'` 

echo -ne '\015'emuliert das Drücken der EnterTaste.

HINWEIS: Das "Zeug" ist ein Bildschirmbefehl. http://www.gnu.org/software/screen/manual/screen.html#Stuff

Könnten Sie bitte angeben, was "Zeug" bedeutet? Ist das ein Name ... oder ein Befehl ... oder andere Parameter? Cerin vor 12 Jahren 0
Es funktioniert zwar, aber ich würde nicht sagen, dass es sowieso einfach ist;) Dies ist so etwas wie das Weitergeben von keypressed-Ereignissen und das Übergeben von Zeilenumbrüchen an den Bildschirm. Gibt es nicht einfach einen normalen Bildschirmbefehl ...? ducin vor 11 Jahren 0
@Cecin: `stuff` ist ein Bildschirmbefehl, um einen String in stdin 'zu stopfen' konrad vor 11 Jahren 0
Das ist sehr gut, aber aus irgendeinem Grund funktioniert es nicht mit "screen -RdS sessionname -X stuff 'ls -l''echo -ne' \ 015'`", warum? e271p314 vor 10 Jahren 0
Dies funktioniert nicht, wenn ich den Befehl zweimal ausführen werde ... und auf separaten Befehlszeilen ... wenn ich `screen -d -m -S Sitzungsname mache; screen -S sessionname -X [...] `nichts wird jemals funktionieren, auch` (screen -d -m -S sessionname &) & sleep 10; screen -S sessionname -X [...] `tut nichts anderes, als einen neuen Bildschirm zu erstellen Sitzung, die nichts tut. Down-Voting user3338098 vor 8 Jahren 0
das funktioniert nicht für mich ... emuliert nicht die Eingabetaste ... Tanner Strunk vor 6 Jahren 0
4

Klingt wie du willst:

$ screen -S test -d -m -c / dev / null - sh -c 'Datum; exec $ SHELL '  -S Test: Benennen Sie diese Sitzung -d -m: Startbildschirm getrennt -c / dev / null: ignore ~ ​​/ .screenrc (eine andere Datei angeben oder diese Option löschen wie benötigt) -: Ende der Bildschirmoptionen sh -c 'Datum; exec $ SHELL ': Befehl zum Ausführen des Bildschirms War nur "Datum", dann würde der Bildschirm sofort verlassen. wenn Sie nicht beenden möchten Nachdem der Befehl beendet wurde, können Sie Folgendes verwenden: $ screen -S test -d -m -c / dev / null - Ihr Befehl hier 

Oder vielleicht möchten Sie nur dtach .

Das Ausführen dieses Ergebnisses führt zu nichts. Keine Erfolgs- oder Fehlermeldungen, aber "screen -list" zeigt, dass keine Sitzungen geöffnet sind. Cerin vor 12 Jahren 0
Diese Antwort hat für mich funktioniert. Der Schlüssel war - zum Beenden der Bildschirmoptionen. Plazgoth vor 8 Jahren 0
1
Jeremy Kao
screen -S <session_name> -X screen [-t <title>] <shell_command> [<args>] 

Öffnen Sie ein neues Fenster (mit dem Titel title ) in einer vorhandenen Sitzung mit dem Namen session_name und führen Sie den Befehl shell_command aus (mit optionalen Argumenten args ).