it-swarm.com.de

So senden Sie Ausgaben 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.

beispiel: Auf dem ersten Terminal starte ich ls und möchte, dass die Ausgabe auf dem zweiten Terminal angezeigt wird (mit oder ohne Verwendung eines Befehls auf dem zweiten).

28
Edward Torvalds

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 w verwenden, die die TTY-Informationen enthält, und direkt auf dieses Gerät schreiben.

ls > /dev/pts/7

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

ls > /proc/5555/fd/1

Angenommen, die in diesem Terminal ausgeführte Prozessnummer lautet 5555.

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

32
RealSkeptic

Sie können den Befehl write verwenden.

Wie @MelBurslan kommentierte, führen Sie zuerst Folgendes aus, wenn die Schreibberechtigung deaktiviert ist:

 $ mesg y

Von man mesg

OPTIONEN

y Ermöglichen Sie Schreibzugriff auf Ihr Terminal.

Verwendung von schreiben:

$ write username tty

z.B. Senden Sie die Ausgabe ls an ein anderes Terminal.

$ w
USER     TTY      FROM             [email protected]   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
15
tachomi

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 am ersten Terminal

8
Edward Torvalds

Verwenden Sie den Befehl tty in jedem Terminal, um sie zu identifizieren:

$ tty
/dev/pts/0

$ tty
/dev/pts/1

Unter der Annahme, dass diese TTYs die Standardausgabe der ersten auf die zweite umleiten, führen Sie diese im ersten Terminal aus:

exec 1>/dev/pts/1

Hinweis: Jetzt wird jede Befehlsausgabe auf pts/1 angezeigt

So stellen Sie das Standardverhalten von pts/0 wieder her:

exec 1>/dev/pts/0

Siehe dieses Video für eine Demonstration.

5

sie können in das TTY des Terminals schreiben. zum Beispiel:

in Terminal 1:

$ tty 
ttys000

in Terminal 2:

$ tty
ttys029

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

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} unter Linux ist es /dev/pts/{number}

0
Miguel Mota