如何编写Bash脚本调用程序并实现延迟自动输入参数?
可行实现方法
方法一:使用Bash管道+sleep(无需额外工具)
直接通过子shell结合sleep延迟后输出输入值,再通过管道传递给程序,实现启动程序后延迟输入的效果:
# 延迟3秒后输入8,可自行调整sleep的秒数 (sleep 3; echo 8) | ./test
原理:管道两侧的进程同时启动,./test启动后会等待标准输入,而左侧子shell先执行sleep 3等待3秒,再输出8,此时程序就能接收到延迟后的输入。
方法二:使用expect工具(适合复杂交互场景)
如果需要处理更复杂的交互式流程,可以用expect工具(部分系统默认未安装,需自行安装,比如apt install expect或yum install expect):
- 编写expect脚本(比如命名为
run_test.exp):
#!/usr/bin/expect # 启动test程序 spawn ./test # 延迟3秒 sleep 3 # 发送输入值,\r模拟回车 send "8\r" # 等待程序结束 expect eof
- 给脚本添加执行权限:
chmod +x run_test.exp
- 运行脚本:
./run_test.exp
原脚本问题说明
你之前用的Here Document(<<EOF)是将EOF之间的内容一次性作为标准输入传递给程序,程序启动后会立刻收到输入,无法实现延迟输入的效果,因此不符合需求。
内容的提问来源于stack exchange,提问作者Muller Thomas
相关产品推荐
相关产品推荐

