我有一个程序在STDIN上等待命令。准备好接受这些命令大约需要2秒钟,并且在每个命令之后需要至少1秒的延迟。
到目前为止,我已尝试过我的剧本。
./myprogram << EOF
command1
command2
command3
EOF
上述工作有时取决于程序启动所需的时间以及执行命令所需的时间。
答案 0 :(得分:0)
你可以试试这个:
( sleep 2
echo command1
sleep 1
echo command2
sleep 1
echo command3
sleep 1 ) | ./myprogram
或查看expect命令。
答案 1 :(得分:0)
在命令之间使用sleep 1
答案 2 :(得分:0)
您可以尝试以下方法:
./myprogram << EOF
command1
$(sleep 2)
command2
$(sleep 2)
command3
EOF
但我强烈建议您查看expect
:
http://linuxaria.com/howto/2-practical-examples-of-expect-on-the-linux-cli
答案 3 :(得分:0)
你确定需要暂停吗?大多数程序将缓冲输入并在它们准备好前一个命令时无缝运行下一个命令。
如果需要暂停 ,则这是expect
的作业。我使用expect
已经有一段时间了,但你想要一个看起来非常像这样的脚本:
spawn myprogram # start your program
sleep 2 # wait 2 seconds
send "command1\r" # send a command
sleep 1
send "command2\r"
sleep 1
send "exit\r"
wait # wait until the program exits
(一个很大的“难题”是每行输入必须以\r
(而不是\n
)终止。这很容易错过。)
但是这可以改进:如果命令运行时间不到一秒,就会浪费时间。或者有时命令会花费比预期更长的时间。由于大多数交互式程序都会显示某种提示,因此最好将其用作提示。期待让这很容易。对于这个例子,我假设您的程序打印“Ready&gt;”当它准备接受新命令时。
spawn myprogram
expect "Ready>"
send "command1\r"
expect "Ready>"
send "command2\r"
expect "Ready>"
send "exit\r"
wait
您需要查阅expect
文档以获取更多高级功能,例如:添加错误处理(如果某些命令失败怎么办?)。