从脚本提供STDIN编程

时间:2014-07-01 15:20:27

标签: linux bash shell sh

我有一个程序在STDIN上等待命令。准备好接受这些命令大约需要2秒钟,并且在每个命令之后需要至少1秒的延迟。

到目前为止,我已尝试过我的剧本。

./myprogram << EOF
command1
command2
command3
EOF

上述工作有时取决于程序启动所需的时间以及执行命令所需的时间。

4 个答案:

答案 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文档以获取更多高级功能,例如:添加错误处理(如果某些命令失败怎么办?)。

相关问题