我有一个问题,我有一个非常简单的脚本,它在循环中启动了一个二进制文件,它看起来像这样:
for (( i=0; \\$i <= 5; i++ )) ; do
test.sh
done
现在问题是每次执行后test.sh都会问我是否要覆盖日志,比如&#34;你想覆盖日志吗? [Y / N]&#34;
在出现该提示后,脚本暂停并停止迭代,直到我手动按Y并继续,直到出现另一个提示。
为了自动化过程,我可以模拟按下&#34; Y&#34;按钮?
答案 0 :(得分:3)
如果您的yes
脚本没有将其标准输入用于其他目的,我认为使用test.sh
可能就足够了:yes
将产生y
的无限流行1}}默认情况下,或任何其他字符串,您将其作为参数传递。每次test.sh
检查用户输入时,它都应该使用该输入的一行并继续其操作。
使用yes Y
,您可以为test.sh
脚本提供比以前更多Y
的脚本:
yes Y | test.sh
要将它与循环一起使用,您也可以将它传递给循环的stdin而不是test.sh
调用:
yes Y | for (( i=0; i <= 5; i++ )) ; do
test.sh
done
答案 1 :(得分:2)
以下代码段应该有效:
for (( i=0; i <= 5; i++ ))
#heredoc. the '-' is needed to take tabulations into acount (for readability sake)
#we begin our expect bloc
do /bin/usr/expect <<-EOD
#process we monitor
spawn test.sh
#when the monitored process displays the string "[Y/n]" ...
expect "[Y/n]"
#... we send it the string "y" followed by the enter key ("\r")
send "y\r"
#we exit our expect block
EOD
done