如何在不創建任何新管道或文件的情況下將輸出從一個終端發送到另一個終端

如何在不創建任何新管道或文件的情況下將輸出從一個終端發送到另一個終端

我只是在我的終端(Gnome 終端)上閒逛。我想知道是否有一種方法可以將一個終端的輸出發送到另一個終端,而無需建立新檔案或管道。

例如:在第一個終端機上,我運行ls並希望其輸出顯示在第二個終端機上(在第二個終端機上使用或不使用任何命令)

答案1

如果兩個終端屬於同一用戶,您可以將輸出傳送到用作特定終端 tty 的虛擬設備。

因此,您可以使用 的輸出w(其中包括 TTY 資訊)並直接寫入該裝置。

ls > /dev/pts/7

(如果提到的設備w是 pts/7)

另一種選擇是使用連接到該裝置的進程號。將您的輸出傳送到/proc/<process number>/fd/1.

ls > /proc/5555/fd/1

假設您發現在該終端機中執行的進程編號是 5555。

請注意,只有在以下情況下才允許直接寫入嘗試寫入的用戶與擁有另一個終端的用戶是同一用戶

答案2

您可以使用write命令。

正如@MelBurslan 評論的那樣,如果寫入權限關閉,首先執行:

 $ mesg y

man mesg

選項

y 允許對您的終端進行寫入存取。

寫入的用法:

$ write username tty

例如,將ls輸出傳送到其他終端。

$ 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

答案3

我找到了類似的方法。

在第一個終端機上:

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

在第二個終端上:

$ ls > /dev/pts/0

現在您可以在第一個終端上獲得輸出

答案4

您可以寫入終端機的 TTY;例如:

在 1 號航站樓:

$ tty 
ttys000

在 2 號航站樓:

$ tty
ttys029

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

即使您鍵入,輸出也會即時顯示在兩個終端中。

適用於 Linux 和 macOS。 macOS TTY 路徑是,/dev/{number}而在 Linux 上是/dev/pts/{number}

相關內容