如何在 bash 脚本中自动回答 y?

如何在 bash 脚本中自动回答 y?

我想通过 bash 脚本卸载一些程序。运行命令后,终端询问我是否确定要卸载它。所以我需要回答y。我想自动执行并y在延迟 10 秒后应答。

我做了这个例子,但它不起作用 -

#!/usr/bin
/opt/MNG/MNGVIEWHP/fe/uninstall
sleep 10
echo "y"

任何想法?森托斯 7.2

答案1

这就是该yes命令的用途。它y每行无限期地输出一个,因此可以通过管道传输到询问是/否问题的命令。

yes | /opt/MNG/MNGVIEWHP/fe/uninstall

这回答y了所有问题。要回答n所有问题,请用 替换yes。对于和 的yes n预定义组合,您可以用以下方式替换:ynyes

printf '%s\n' y n n y y n...

或者运行它:

/opt/MNG/MNGVIEWHP/fe/uninstall << 'EOF'
y
n
n
y
y
n
EOF

如果您确实需要在 10 秒之前无法阅读答案,您可以这样做:

(sleep 10; echo y; sleep 2; echo n;...) | /opt/MNG/MNGVIEWHP/fe/uninstall

但这可能不是必需的,当我们写入y管道时,只要它想读取它,它就会在那里uninstall读取它,您不太可能需要等待它准备好读取它。例外情况是如果uninstall决定在提问之前刷新输入。

所有这些都假设该uninstall命令只是将每个答案作为标准输入中的一行输入读取。

对于更复杂的情况,命令直接从 tty 设备读取答案,或者您需要有条件地提供答案(例如根据命令输出的内容),您可以使用expectorzsh之类的东西zpty

请注意,许多交互式程序在传递某些选项时可以进入某些非交互式模式。在花费太多精力解决问题之前,您可能需要先查看他们的手册。

相关内容