Ich schreibe ein Shell-Skript und möchte Befehle in das Skript schreiben, aber die Ausgabe auf andere Konsolensitzungen umleiten. (mit kde)
Ich schreibe ein Shell-Skript und möchte Befehle in das Skript schreiben, aber die Ausgabe auf andere Konsolensitzungen umleiten. (mit kde)
Antworten:
Suchen Sie zunächst nach der Nummer, die die aktuelle Sitzung identifiziert. Betrachten wir die Zahl als X
:
| terminal 1 | terminal 2 |
------------------------------------------------------
| $ tty | $ |
| /dev/pts/X | |
Verwenden Sie dann die angegebene Nummer, um in das ausgewählte tty zu schreiben:
| terminal 1 | terminal 2 |
------------------------------------------------------
| $ tty | $ echo "foo" > /dev/pts/X |
| /dev/pts/X | |
Und es wird produzieren:
| terminal 1 | terminal 2 |
------------------------------------------------------
| $ tty | $ echo "foo" > /dev/pts/X |
| /dev/pts/X | |
| foo | |
Ausgabe des Terminals in eine Datei statt des Terminals drucken, in dem Sie sich befinden:
commands >>outputfile
Verwenden Sie in einem neuen Terminal tail, um den Inhalt der Ausgabedatei anzuzeigen und automatisch zu aktualisieren, wenn weiterer Text hinzugefügt wird:
tail -f outputfile
Spät aber vielleicht besser als nie ... :-)
mkfifo ~/MyOutput # Create the FIFO (Special file)
./MyScript.sh > ~/MyOutput # In the terminal/console 1
cat ~/MyOutput # In another tty/console
von info coreutils 'mkfifo invocation'
:
Ein "FIFO" ist ein spezieller Dateityp, mit dem unabhängige Prozesse kommunizieren können. Ein Prozess öffnet die FIFO-Datei zum Schreiben und ein anderer zum Lesen, wonach Daten wie bei der üblichen anonymen Pipe in Shells oder anderswo fließen können.
Randnotizen:
FIFO
für den gleichen Prozess haben (std out, std err).FIFOs
, wird die gesamte Ausgabe gespeichert . cat MyOutput >> NewRealFile
cat MyOutput
von einem anderen Terminal aus verwenden!FIFOs
des Fluss wird (nicht zusammengeführt werden a priori Art und Weise aus dem Programm zu unterscheiden , die Linie herkommt).Verwenden Sie den tty
Befehl in jedem Terminal, um sie zu identifizieren:
$ tty
/dev/pts/0
$ tty
/dev/pts/1
Angenommen, diese TTYs leiten die Standardausgabe der ersten auf die zweite um. Führen Sie dies im ersten Terminal aus:
exec 1>/dev/pts/1
Hinweis: Jetzt wird jede Befehlsausgabe auf pts / 1 angezeigt
So stellen Sie das Standardverhalten stdout von pts / 0 wieder her:
exec 1>/dev/pts/0
In diesem Video sehen Sie eine Demonstration.