Erstellen Sie einen STD IN / OUT-Puffer für ein Programm, das in einer Bildschirmsitzung ausgeführt wird

391
varlogtim

Umgebung

Linux version 2.6 Screen version 4.03.01 

Ich führe eine Anwendung in einer Bildschirmsitzung aus. Das Programm druckt auf STDOUT und liest von STDIN.

Was ich gerne machen würde:

Habe zuerst STDOUT von screen tee'd zu einer Datei. Aus irgendeinem Grund schreibt die Leitung zum Abschlag nur die ersten Zeilen und stoppt dann. Dies ist möglicherweise darauf zurückzuführen, dass das von mir ausgeführte Shell-Skript andere Anwendungen / Shell-Skripts ausführt. Gibt es eine Möglichkeit, eine Verbindung zum STDOUT der Bildschirmsitzung herzustellen?

Zweitens möchte ich eine Datei erstellen, wie etwa eine FIFO?, Die ich schreiben kann, um sie an das STDIN der Bildschirmsitzung senden zu lassen.

Ich bin offen für andere Vorschläge, wie nicht mit screenüberhaupt und mit etwas zu tun, nohupund einig fifo‚s

Grundsätzlich möchte ich eine Anwendung im Hintergrund haben und über eine Datei verfügen, die ich für die Ausgabe anpassen kann, und eine andere, um die Eingabe umzuleiten.

0

1 Antwort auf die Frage

0
John1024

Grundsätzlich möchte ich eine Anwendung im Hintergrund haben und über eine Datei verfügen, die ich für die Ausgabe anpassen kann, und eine andere, um die Eingabe umzuleiten.

Wenn dies der Fall ist, müssen wir (1) applicationdie Ausgabe in eine Datei senden und in eine Datei senden file:

application >file & 

Und (2) müssen wir die Ausgabe der Anwendung an den Befehl anpassen another:

tail -f | another 

Beispiel

Lassen Sie uns ein Beispiel erstellen applicationund another:

$ application() { while sleep 1; do date; done; } $ another() { grep 2017; } 

Beginnen wir nun applicationim Hintergrund:

$ application >file & [1] 5989 

Und lass uns anotherim Vordergrund laufen :

$ tail -f file | another Sat May 20 18:32:05 PDT 2017 Sat May 20 18:32:06 PDT 2017 Sat May 20 18:32:07 PDT 2017 Sat May 20 18:32:08 PDT 2017 Sat May 20 18:32:09 PDT 2017 Sat May 20 18:32:10 PDT 2017 [...clip...] 

Innerhalb einer Bildschirmsitzung mit einem FIFO

Starten Sie zuerst eine Bildschirmsitzung. Dann renne:

$ mkfifo fifo $ application >fifo & [1] 8129 $ cat fifo | another Sat May 20 18:50:39 PDT 2017 Sat May 20 18:50:40 PDT 2017 Sat May 20 18:50:41 PDT 2017 Sat May 20 18:50:42 PDT 2017 Sat May 20 18:50:43 PDT 2017 Sat May 20 18:50:44 PDT 2017 Sat May 20 18:50:45 PDT 2017 Sat May 20 18:50:46 PDT 2017 [...snip...] 

(Ich habe es cat fifo | anotherwegen seiner Parallelität zur ersten tail -fVersion verwendet. Ist cathier nicht notwendig. Wir hätten es auch tun können another <fifo.)

Lies meinen Beitrag. ;) varlogtim vor 7 Jahren 1
@varlogtim Lies meine Antwort. Ich habe den zusammenfassenden Satz aus Ihrem Post zitiert und das getan, was das Zitat verlangt. Wenn Sie etwas anderes wünschen, seien Sie bitte klar und präzise. John1024 vor 7 Jahren 0
Lesen Sie stdout und schreiben Sie in stdin einer Bildschirmsitzung, vorzugsweise mit FIFO-Dateien. varlogtim vor 7 Jahren 0
Wie erwähnt, enthält das Pipeing der Programmausgabe nur die ersten Zeilen und stoppt dann. varlogtim vor 7 Jahren 0
Spült Ihre "Anwendung" die Ausgabe? Erik Bennett vor 7 Jahren 1
@varlogtim (A) Das Obige kann in einer Bildschirmsitzung genauso wie im Freien ausgeführt werden. Ich habe ein Beispiel in eine Bildschirmsitzung eingefügt und anstelle einer Datei ein FIFO verwendet. (B) Ich kann das Problem mit dem Anhalten der Ausgabe nicht reproduzieren. Es geht weiter für mich. Verwenden Sie meine Anwendung und eine andere oder etwas anderes? John1024 vor 7 Jahren 0
Ich kann das wahrscheinlich herausfinden und dann mit der Antwort aktualisieren. varlogtim vor 7 Jahren 0