So senden Sie die Ausgabe von einem Terminal an ein anderes, ohne eine neue Pipe oder Datei zu erstellen

So senden Sie die Ausgabe von einem Terminal an ein anderes, ohne eine neue Pipe oder Datei zu erstellen

Ich spiele nur auf meinem Terminal (Gnome-Terminal) herum. 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.

zum Beispiel: Auf dem ersten Terminal führe ich aus lsund möchte, dass die Ausgabe auf dem zweiten Terminal angezeigt wird (mit oder ohne Verwendung eines Befehls auf dem zweiten)

Antwort1

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.

ls > /dev/pts/7

(Wenn das von erwähnte Gerät wpts/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.

ls > /proc/5555/fd/1

Angenommen, die Prozessnummer, die Sie gefunden haben und die in diesem Terminal ausgeführt wird, ist 5555.

Beachten Sie, dass dieser direkte Schreibvorgang nur zulässig ist, wennDer Benutzer, der versucht zu schreiben, ist derselbe Benutzer, dem das andere Terminal gehört..

Antwort2

Sie können writeden Befehl verwenden.

Wie @MelBurslan kommentierte, führen Sie bei deaktivierter Schreibberechtigung zuerst Folgendes aus:

 $ mesg y

Ausman mesg

OPTIONEN

y Erlauben Sie Schreibzugriff auf Ihr Terminal.

Verwendung von „write“:

$ write username tty

zB lsAusgabe an anderes Terminal senden.

$ w
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
user     :0       :0               08:15   ?xdm?   7:37   0.25s init --user
user     pts/0    :0               08:19    1.00s  0.09s  0.01s w
user     pts/12   :0               08:50   54.00s  0.03s  0.03s bash

$ ls | write username pts/12

Antwort3

Ich habe eine ähnliche Methode gefunden.

Am ersten Terminal:

 $ tty
 /dev/pts/0
 $ <no need to run any command here, just see the output>

Am zweiten Terminal:

$ ls > /dev/pts/0

Jetzt erhalten Sie die Ausgabe auf dem ersten Terminal

Antwort4

Sie können auf das TTY des Terminals schreiben, zum Beispiel:

im Terminal 1:

$ tty 
ttys000

im Terminal 2:

$ tty
ttys029

$ exec &> >(tee >(cat >&/dev/ttys000))
ls 

Die Ausgabe wird während der Eingabe in beiden Terminals in Echtzeit angezeigt.

Funktioniert unter Linux und macOS. Der macOS TTY-Pfad lautet /dev/{number}unter Linux/dev/pts/{number}

verwandte Informationen