我只是在我的终端(Gnome 终端)上闲逛。我想知道有没有一种方法可以将一个终端的输出发送到另一个终端而无需创建新文件或管道。
例如:在第一个终端上我运行ls并希望其输出显示在第二个终端上(在第二个终端上使用或不使用任何命令)
Rea*_*tic 39
如果两个终端属于同一用户,您可以将输出发送到用作特定终端的 tty 的虚拟设备。
因此,您可以使用 的输出w(其中包括 TTY 信息)并直接写入该设备。
ls > /dev/pts/7
Run Code Online (Sandbox Code Playgroud)
(如果提到的设备w是pts/7)
另一种选择是使用连接到该设备的进程号。将您的输出发送到/proc/<process number>/fd/1.
ls > /proc/5555/fd/1
Run Code Online (Sandbox Code Playgroud)
假设您发现在该终端中运行的进程号是 5555。
请注意,仅当尝试写入的用户与拥有另一个终端的用户相同时,才允许此直接写入。
tac*_*omi 19
您可以使用write命令。
正如@MelBurslan 评论的,如果写权限关闭,首先执行:
$ mesg y
Run Code Online (Sandbox Code Playgroud)
从 man mesg
选项
y 允许对您的终端进行写访问。
写的用法:
$ write username tty
Run Code Online (Sandbox Code Playgroud)
例如将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
Run Code Online (Sandbox Code Playgroud)
Edw*_*lds 10
我找到了一个类似的方法。
在第一个终端上:
$ tty
/dev/pts/0
$ <no need to run any command here, just see the output>
Run Code Online (Sandbox Code Playgroud)
在第二个终端:
$ ls > /dev/pts/0
Run Code Online (Sandbox Code Playgroud)
现在你在第一个终端上得到输出
tty在每个终端中使用命令来识别它们:
$ tty
/dev/pts/0
$ tty
/dev/pts/1
Run Code Online (Sandbox Code Playgroud)
假设这些 TTY,要将第一个的 stdout 重定向到第二个,请在第一个终端中运行:
exec 1>/dev/pts/1
Run Code Online (Sandbox Code Playgroud)
注意:现在每个命令输出都将显示在 pts/1 上
要恢复 pts/0 的默认行为标准输出:
exec 1>/dev/pts/0
Run Code Online (Sandbox Code Playgroud)
请参阅此视频以进行演示。