Ich schreibe ein Shell-Skript und möchte Befehle in das Skript schreiben, aber die Ausgabe auf andere Konsolensitzungen umleiten. (mit kde)
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 | |
Sie können die Ausgabe an eine Protokolldatei weiterleiten, die von anderen Sitzungen überwacht wird.
In jedem anderen Terminal:
touch foo && tail -f foo
Im "Haupt" Terminal:
script.sh > 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.