如何在不创建任何新管道或文件的情况下将输出从一个终端发送到另一个终端

如何在不创建任何新管道或文件的情况下将输出从一个终端发送到另一个终端

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

相关内容