我经常使用一个名为 的程序tty0tty
,它使用 PTY 创建一个空调制解调器。现在我想让它成为自动化流程的一部分。
当我启动时tty0tty
它打印
(/dev/pts/1) <=> (/dev/pts/2)
是否可以解析输出并将匹配结果用作另一个程序的参数?这样以下几行就可以自动化:
linux$ tty0tty &
(/dev/pts/X) <=> (/dev/pts/Y)
linux$ someprogram /dev/pts/X &
linux$ microcom /dev/pts/Y
答案1
您可以使用sed
和流程替代:
read left right < <(tty0tty | head -n 1 | sed -e 's/[()<=>]//g' &)
之后,$left
是/dev/pts/X
和right
是/dev/pts/Y
。
这有点作弊 - 我们只是将字符(
, )
, <
, =
, 和替换>
为空,然后依赖 shell 的分词功能。
我们通过管道将tty0tty
输出输入,head
因此我们只获取第一行(唯一的)输出,并且不会永远阻塞。从那里它进入sed
执行替换的命令,然后使用 shell 的read
bultin 绑定 shell 变量left
以及right
我们给它的输入的第一个和第二个单词。我们从 中获取该输入<(...)
。在子 shell 中<(...)
运行...
并将其输出连接到我们可以读取的管道。我们将read
第一个管道输入到管道中<
,因此它会得到/dev/pts/X /dev/pts/Y
并将其分成我们想要的两个单词。
之后你就可以根据需要运行someprogram $left
了。microcom $right