redirectstdin来自不同的terminal使用Bash

我想知道如何将脚本从当前xterm会话,即/ dev / pts / 0redirect到一个也正在运行ie / dev / pts / 1使用bash? 我有一个bash脚本,打开3个xterm窗口,我只想从这些窗口中的一个input,我无法弄清楚如何做到这一点。 任何帮助表示赞赏! 谢谢。


编辑 (从下面移动 – OP提交此澄清作为答案)

我想我应该澄清我想做的事情。 我将从一个pty开始一个脚本,假设它是/ dev / pts / 3。 这个脚本会打开3个terminal,比如说:/ dev / pts / 0,/ dev / pts / 1和/ dev / pts / 2。 这3个新的ptys是用户将要看到的。 该脚本要求用户input一些信息,我希望用户的input被input到/ dev / pty / 1中,程序应该从那里获取信息。 不过,我试图做到这一点,它不工作。 这是我的代码片段。

exec</dev/pts/1 echo echo "Would you like to search for more info?" 1>/dev/pts/1 read answer case $answer in y) echo "YES" ;; n) echo "NO" ;; *) echo "y/n only!";; esac 

最后的case语句只是一个小小的占位符,看看input是否真正起作用。

我怀疑这是不可能的。 AFAIK,不修改内核空间中的某些东西,不可能从tty(或者pty)读取不是当前tty的输入。 甚至根不能做到这一点。 我花了一些时间来研究这个问题,但是我不知道该怎么做,但是我发现很多消息来源都说这是不可能的。 这似乎是增加用户安全/隐私的设计决定。

也许你可以调整你的需求ttyecho

 # /dev/ttysXXX is the result of the tty command in another Terminal window sudo ttyecho -n /dev/ttysXXX pwd 

也许ttyecho可以结合使用netcat (或nc )或ncat (这是nmap的一部分)在不同的ttys之间进行通信?

有关更多信息,请参阅

  • 将命令或数据发送到其他终端的实用程序(tty / pts) – (ttyecho)
  • 使用命名管道创建读/写环境

为了回答你澄清的问题,一个简单的方法是使用一个FIFO(命名管道)作业。 在发送终端上:

 mkfifo ./myfifo read var echo "var" > myfifo 

在接收终端上:

 read line < ./myfifo 

要简单地从你自己的xterm打印另一个xterm,在接收xterm:

 $ tty /dev/pts/2 

在发送xterm:

 $ echo howdy doody > /dev/pts/2 

或者从发送xterm的脚本中,按照您的要求重定向stdin:

 $ cat > /dev/pts/2 

如果你在不同用户之间进行这种操作,你必须chmod写入/ dev / pts / 2的权限。

您无法在接收终端上捕获以这种方式打印的内容。 没有内置的重定向方法来捕获来自另一个终端的输入。

如果你想要一个自动化的方式来发送xterm来找出接收方的字符设备,这可以通过几种方式来回答,具体取决于你想要使用什么样的进程间通信。 一个简单的黑客应该是接收者做tty> file1和发件人做什么> $(猫文件1)。

如果你想尝试从接收者而不是发送者那里得到,那么你就有一个进程间通信问题,可以通过几种方式来解决。

这很简单,你只需要了解

ls -ls / dev / pts你会看到

0 1 2 3 4假设你打开几个

现在使用一个NOT 4并输入cat </ dev / pts / 4或者exec <cat / dev / pts / 4

并在第4个键入一些东西,你现在知道发生了什么