
我只是在我的終端(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}