在一个终端中执行命令并在另一个终端中获取输出,这可能吗?怎么样?

在一个终端中执行命令并在另一个终端中获取输出,这可能吗?怎么样?

在一个终端中执行命令并在另一个终端中获取输出

答案1

可能与某种称为有关named pipe

这是一个基本的演示:

  1. 打开终端窗口 1。
  2. 输入mkfifo /tmp/myPipe并按回车键
  3. 输入echo "Hello Named Pipe" > /tmp/myPipe &并按回车键
  4. 开放 2 号航站楼
  5. 运行cat /tmp/myPipe查看输出

在此处输入图片描述

另一个可能的解决方案是screen运行会话,并附加/分离它。

答案2

在接收终端上,执行命令w。这将打印当前正在运行的会话列表,例如,当我运行该命令时,它会打印:

 13:39:22 up 11 min,  3 users,  load average: 0.32, 0.50, 0.33
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
sebastia tty8     :0               13:27   11:52  21.10s  0.31s cinnamon-session --session cinnamon
sebastia pts/1    :0               13:36   10.00s 23.90s  0.29s sudo apt-get update
sebastia pts/3    :0               13:37    1.00s  0.11s  0.01s w

你所在的那个当然是带有命令的那个w(在列中列出WHAT)。

在此列表中,您还会发现一个名为的部分TTY。在那里,您将看到终端缓冲文件的名称,例如pts/3我在其中执行的文件w

现在假设我想执行在 pts1 中运行的命令,并将其输出打印到 pts3。可以这样做(使用上面的命令):

sudo apt-get update > /dev/pts/3

这会将所有输出转发到 pts3。但是,它不会采取任何输入从那里开始。不幸的是,我没能找到解决方案。(欢迎补充)


根据您想要实现的目标,终端多路复用器(例如 Tmux 或 GNU Screen)可能更适合此任务。例如,使用 Tmux,请按如下方式进行:

使用命令启动 Tmux tmux。您将进入一个新的 shell。在那里执行您的命令。

在接收终端中,运行tmux a以连接到现有的 Tmux 会话。现在您可以与此终端进行交互。

如果你愿意,你可以随时使用Ctrl+ 键B,然后按 键从 Tmux 断开连接D。你可以使用 键从任何地方重新连接tmux a

相关内容