我想知道如何将脚本的stdin从当前的xterm会话(即/ dev / pts / 0)重定向到使用bash运行即/ dev / pts / 1的脚本?我有一个打开3个xterm窗口的bash脚本,我想从其中一个窗口获取输入,我无法弄清楚如何做到这一点。任何帮助表示赞赏!感谢。
我想我应该澄清一下我想做什么。我将从一个pty开始一个脚本,让我们说它是/ dev / pts / 3。这个脚本将打开3个终端,比方说:/ dev / pts / 0,/ dev / pts / 1和/ dev / pts / 2。这3个新的ptys是用户将要看到的。该脚本要求用户输入一些内容,我希望将用户的输入输入到/ 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
最后的案例陈述只是一个小占位符,看看输入是否真的有效。
答案 0 :(得分:8)
也许您可以根据需要调整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之间进行通信?
有关详细信息,请参阅:
答案 1 :(得分:5)
我怀疑这是不可能的。 AFAIK,在不修改内核空间中的内容的情况下,不可能从tty(或pty)读取不是当前tty的输入。即使root也无法做到。我花了一些时间研究这个,我无法找到如何做到这一点,但我发现很多消息来源声称这是不可能的。这似乎是提高用户安全性/隐私的设计决策。
答案 2 :(得分:4)
要回答您澄清的问题,一种简单的方法是为作业使用FIFO(命名管道)。在发送终端:
mkfifo ./myfifo
read var
echo "var" > myfifo
在接收终端上:
read line < ./myfifo
在接收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&gt; file1和发送者做什么回应&gt; $(cat file1)。
如果你想尝试从接收者而不是发送者那里引导它,你又会遇到一个可以通过多种方式解决的进程间通信问题。
答案 3 :(得分:1)
ls -ls / dev / pts 你会看到
0 1 2 3 4 假设你打开了几个
现在使用一个NOT 4 并输入 猫&lt;的/ dev / PTS / 4 要么 exec&lt; cat / dev / pts / 4
并在第4个输入内容 你现在知道会发生什么了