gpt4 book ai didi

bash - bash中如何确定哪一对伪tty端口相互连接

转载 作者:行者123 更新时间:2023-12-04 01:54:42 25 4
gpt4 key购买 nike

我有一对使用伪终端 /dev/pts/* 相互通信的 linux C 程序。可以通信的 pty 作为命令行参数传递给这些程序。

我可以使用 socat 创建一对 pty 设备,如下所示:

socat -d -d pty,raw,echo=0 pty,raw,echo=0

上面的输出为:

2018/07/05 17:56:54 socat[58319] N PTY is /dev/pts/1
2018/07/05 17:56:54 socat[58319] N PTY is /dev/pts/3
2018/07/05 17:56:54 socat[58319] N starting data transfer loop with FDs [7,7] and [9,9]

如何从 socat 的输出中提取 pty 节点 /dev/pts/* 并通过 shell 脚本中的命令行传递给我的应用程序:

$./test_pty_app /dev/pts/1 & 
$./test_pty_app /dev/pts/2 &

我看到一个类似的问题可以在 python 中执行此操作 here谢谢!

最佳答案

更新的答案

如果 socat 必须在后台运行,那么您似乎必须使用一个文件。

( socat ... 2>&1 | grep -Eo "/dev/pts/\d+" > /tmp/a ) &
portA=$(head -n 1 /tmp/a)
portB=$(tail -n 1 /tmp/a)

原始答案

@jeremysprofile 的回答可能更明智,但为了好玩,您也可以执行以下任一操作:

socat ... | grep -Eo "/dev/pts/\d+" | { read portA; read portB; }

或者,使用 bash 的“进程替换”,您可以:

{ read portA; read portB; } < <(socat ... | grep -Eo "/dev/pts/\d+")

然后你可以在其中任何一个之后执行此操作:

./test_pty_app $portA &
./test_pty_app $portB &

关于bash - bash中如何确定哪一对伪tty端口相互连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51200954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com