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