我想通过 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
预定义组合,您可以用以下方式替换:y
n
yes
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 设备读取答案,或者您需要有条件地提供答案(例如根据命令输出的内容),您可以使用expect
orzsh
之类的东西zpty
。
请注意,许多交互式程序在传递某些选项时可以进入某些非交互式模式。在花费太多精力解决问题之前,您可能需要先查看他们的手册。