Ich mache nur ein bisschen rum auf meinem Terminal (Gnome-Terminal). Ich habe mich gefragt, ob es eine Möglichkeit gibt, die Ausgabe eines Terminals an ein anderes zu senden, ohne eine neue Datei oder Pipe erstellen zu müssen.
Beispiel: Auf dem ersten Terminal starte ich ls
und möchte, dass seine Ausgabe auf dem zweiten Terminal angezeigt wird (mit oder ohne Verwendung eines Befehls auf dem zweiten Terminal).
command-line
Edward Torvalds
quelle
quelle
ls
und möchte, dass seine Ausgabe auf dem zweiten Terminal angezeigt wird (mit oder ohne Verwendung eines Befehls auf der zweiten)Antworten:
Wenn beide Terminals demselben Benutzer gehören, können Sie Ihre Ausgabe an das virtuelle Gerät senden, das als Tty des jeweiligen Terminals verwendet wird.
Sie können also die Ausgabe von verwenden
w
, die die TTY-Informationen enthält, und direkt auf dieses Gerät schreiben.(Wenn das von erwähnte Gerät
w
pts / 7 war)Eine andere Möglichkeit besteht darin, die Nummer eines Prozesses zu verwenden, der mit diesem Gerät verbunden ist. Senden Sie Ihre Ausgabe an
/proc/<process number>/fd/1
.Angenommen, Sie haben die Prozessnummer gefunden, die in diesem Terminal ausgeführt wird.
Beachten Sie, dass dieses direkte Schreiben nur zulässig ist, wenn der Benutzer, der versucht zu schreiben, derselbe Benutzer ist, dem das andere Terminal gehört .
quelle
/dev/pts/7
oder ähnlich mitw
Befehl, aber der zweite Weg funktioniert für mich/proc/XXX/fd/1
ist im Allgemeinen eine weiche Verbindung zum Basisgerät. Versuchen Sie es mitls -l /proc/XXXX/fd/1
und sehen Sie, worauf es zeigt. Hat es etwas mit dem zu tun, was imw
Befehl steht?w
Befehl mit/proc/XXX/fd/0
Ich beziehe mich aufw
Befehl mit/dev/pts/7
/proc/XXX/fd/1
dies eine weiche Verbindung zu dem Gerät sein soll, das derw
Befehl anzeigt. Was ist die Ausgabels -l
davon?tty
(nur aktuell) oderwho
(alle) gefunden werden.Sie können den
write
Befehl verwenden.Führen Sie, wie @MelBurslan kommentierte, Folgendes aus, wenn die Schreibberechtigung deaktiviert ist:
Von
man mesg
Verwendung von write:
zB
ls
Ausgabe an anderes Terminal senden .quelle
w
Befehl ausgegeben,edward tty2 19:53 6:05 2:48 23.12s firefox
und wenn ich schreibe,ls | write edward tty2
erhalte ich keine Ausgabe, sondern einen Pieptonedwardd
anstatt getippt hastedward
?you have turned write permission off
mesg y
Befehl auf dem Zielterminal, bevor Sie den BefehlIch habe eine ähnliche Methode gefunden.
Am ersten Terminal :
Am zweiten Terminal :
Jetzt erhalten Sie die Ausgabe am ersten Terminal
quelle
tail -f
stattcat
könnte nützlich seinVerwenden Sie den
tty
Befehl in jedem Terminal, um sie zu identifizieren:Unter der Annahme, dass diese TTYs die Standardausgabe der ersten auf die zweite umleiten, führen Sie diese im ersten Terminal aus:
So stellen Sie das Standardverhalten stdout von pts / 0 wieder her:
In diesem Video sehen Sie eine Demonstration.
quelle
Sie können an das TTY des Terminals schreiben. beispielsweise:
in terminal 1:
in terminal 2:
Die Ausgabe wird in beiden Terminals auch während der Eingabe in Echtzeit angezeigt.
Funktioniert unter Linux und MacOS. Der macOS TTY-Pfad lautet,
/dev/{number}
während er unter Linux ausgeführt wird/dev/pts/{number}
quelle
exec &> >(tee >(cat >&/dev/ttys000))
ist nicht vorhanden, so dass keine Eingabe möglich ist.tty
wird so etwas wie/dev/pts/0
exec &> >(tee >(cat >&/dev/pts/1))
. Es funktioniert keine Steuertastenkombination (Strg + C). Ich muss das Terminal töten, um auszusteigenSie können
wall
auch verwenden:quelle
wall
(kurz für "Write All"), da es in jede angemeldete Sitzung schreibt, einschließlich der Sitzung, von der Sie senden. Stattdessenwrite
ermöglicht using die Deklaration einer bestimmten tty.