题
我想知道如何从当前的 xterm 会话重定向脚本的标准输入,即/dev/pts/0 到也正在运行的一个,即使用 bash 的 /dev/pts/1 ?我有一个打开 3 个 xterm 窗口的 bash 脚本,我只想从其中一个窗口获取输入,但我不知道该怎么做。任何帮助表示赞赏!谢谢。
编辑 (从下面移动 - OP 提交了此澄清作为答案)
我想我应该澄清我想做什么。我将从 pty 启动一个脚本,假设它是 /dev/pts/3。该脚本将打开 3 个 xterminal,比如说:/dev/pts/0、/dev/pts/1 和 /dev/pts/2。用户将看到这 3 个新 pty。该脚本要求用户提供一些输入,我希望将用户的输入输入到 /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 语句只是一个小占位符,用于查看输入是否实际有效。
解决方案
我怀疑这是不可能的。据我所知,没有在内核空间修饰的东西,这是不可能读取一个tty(或控股)输入这不是当前的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 的一部分)用于在不同的 tty 之间进行通信?
欲了解更多信息,请参阅:
要回答你的问题澄清,一个简单的方法是使用一个FIFO(命名管道)作业。上发送终端:
mkfifo ./myfifo
read var
echo "var" > myfifo
在所述recieving终端:
read line < ./myfifo
要简单地从你自己的打印另一个xterm中,在recieving的xterm:
$ tty
/dev/pts/2
在发送的xterm:
$ echo howdy doody > /dev/pts/2
或从发送的xterm一个脚本,重定向标准输入你问:
$ cat > /dev/pts/2
您有和chmod的权限写入到/ dev / PTS / 2,如果你的整个用户这样做。
您不能捕获最新打印recieving终端上这种方式。没有内置重定向方法来捕获从另一个终端的输入端。
如果你想要发送的xterm找出一个接收的字符设备的自动化的方式,这可能是回答取决于你想用什么样的进程间通信的几种方法。一个简单的黑客将是接收器做TTY> file1和发送者做任何回声> $(猫file1的)。
如果您想尝试,并从接收器,而不是直接发送者这一点,再次你有一个可以用几种方式来解决进程间通信问题。
它是简单 你只需要了解
LS -ls的/ dev / PTS 你会看到
0 1 2 3 4 假设你打开几个
现在使用一个NOT 4 和类型 猫<的/ dev / PTS / 4 要么 EXEC <猫的/ dev / PTS / 4
和在第4一种类型的东西 你现在知道会发生什么