为什么我的程序在提供带有“

为什么我的程序在提供带有“

我有一个已编译的 COTS 程序 (.exe),我通常通过 stdin(手动键盘输入)与之交互。相反,我尝试使用<<<通过字符串提供输入。

通常我调用该程序...

./program.exe

然后提供我想要的选项(在本例中,我按“G”),它会执行一些操作并在屏幕上输出一些文本。

我尝试使用以下命令从脚本中提供“G”选项:

./program.exe<<<G

但似乎程序使用“G”选项连续执行,而不是只执行一次。输出淹没了我的屏幕,使我的终端无法使用,直到我强制终止。是否<<<连续发送字符串?我认为问题是程序期望从标准输入读取并且不是设计来处理<<<....但我不确定。有什么方法可以让这项工作发挥作用吗?

答案1

<<<不“连续发送字符串”。它只发送一次字符串。更准确地说,它创建一个包含该字符串的临时文件,并在程序的标准输入上打开它。

这个程序似乎有问题,并且在到达末尾时会倒回其输入流。

要解决此错误,请使用管道而不是临时文件来发送输入。管道无法重绕,因此不会触发此特定错误。

echo G | ./program.exe

使用管道可能会引发不同的错误。当某些程序的输入不是来自终端时,它们确实无法正常运行。如果管道不起作用,下一步就是使用预计使用实际终端运行程序(没有用户交互:expect 管理交互)。 Expect 可让您控制终端上发送和接收的内容以及发送时间。这是一个G Enter在程序启动后立即模拟输入的期望脚本:

#!/usr/bin/expect -f
spawn ./program.exe
send "G\r"

相关内容