Wie kann ich die Ausgabe innerhalb von "screen" in ein Skript umwandeln?

33

Ich habe eine screenInstanz ausgeführt, und ich müsste einen Code in der ausführen screenund das Ergebnis in meinem Skript ausgeben.

Der erste Teil ist ganz einfach, ich nur screen -S session_name -X eval 'stuff "$cmd"\015'.
(Ich habe eine Zeile geändert , die ich in einem Skript gefunden habe. )

Der zweite Teil, die Ausgabe herauszubekommen, ist schwieriger. Wie kann ich die gesamte Ausgabe erhalten, unabhängig von der Größe?

1ace
quelle
1
Verwandte: Erklärung vonscreen -X stuff … ; eine ähnliche Frage wie Sie .
Gilles 'SO- hör auf böse zu sein'
Danke :) Der zweite Link wurde erklärt, warum der erste Befehl sein muss stuff, was ich nur schwer verstehen konnte.
1.

Antworten:

29

Sie könnten screenmit der -LOption beginnen. Dadurch wird auf dem Bildschirm eine Datei screenlog.nim aktuellen Arbeitsverzeichnis erstellt (der n-Teil ist numerisch und beginnt mit einer Null).

In Ihrem Fall würde dies ungefähr so ​​aussehen: screen -S session_name -L -X eval 'stuff "$cmd"\015'

Solange Sie daran denken, danach aufzuräumen, sollte dies mit dem übereinstimmen, wonach Sie suchen.

Für die letzte Zeile des Protokolls kann es leicht mit abgerufen werden tail -1 screenlog.0, oder das gesamte Protokoll kann analysiert werden, wie Sie es wünschen.

NJ
quelle
Eine Sache, aber: der screen. Befehl gab ich war nur in den Befehl zum Senden der starten screen, habe ich screen -dmS name program;-)
1ace
22

Eine weitere Nuance, die in Zukunft hilfreich sein kann: Wenn Sie sich in einer Bildschirmsitzung befinden, können Sie interaktiv nach der Erstellung der Protokolldatei fragen. Drücken Sie ctrl- a H(Strg-A, gefolgt von Großbuchstabe H), um den Bildschirm aufzufordern, das Fenster, in dem Sie sich befinden, in eine Protokolldatei zu kopieren.

Rickumali
quelle
5
Ich weiß nicht, ob es an einer neueren Version liegt, aber man screenich muss CA H ohne das Steuerelement für den H. Sad eingeben, damit das vorherige Protokoll nicht erfasst wird.
Matmarbon
2
Du hast recht! Es ist CA H, eine Protokolldatei zu generieren. Bitte beachten Sie, dass es sich um Großbuchstaben H handelt (Kleinbuchstaben h erzeugen nur eine Hardcopy des aktuellen Bildschirms).
Rickumali
3
Bitte aktualisieren Sie die Antwort auf CA H. Zukünftige Sucher können irregeführt werden und die richtige Antwort verpassen.
GC5
Kennt jemand eine Möglichkeit, den Befehl über ein Skript zu senden? Wie bei Sendesteuerung + a und dann das H nach einem Sekundenbruchteil.
Zach W.