我想知道如何从当前的 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一种类型的东西 你现在知道会发生什么

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top