我有一个已编译的 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"