我想通过 bash 脚本卸载一些程序。运行命令后,终端询问我是否确定要卸载它。所以我需要回答y。我想自动完成并y在延迟 10 秒后回答。
我做了这个例子,但它不起作用 -
#!/usr/bin
/opt/MNG/MNGVIEWHP/fe/uninstall
sleep 10
echo "y"
Run Code Online (Sandbox Code Playgroud)
任何的想法?Centos 7.2
Sté*_*las 73
这就是yes命令的用途。它y无限期地每行输出一个,因此它可以通过管道传输到询问是/否问题的命令。
yes | /opt/MNG/MNGVIEWHP/fe/uninstall
Run Code Online (Sandbox Code Playgroud)
那就是y所有问题的答案。要回答n所有问题,请替换yes为yes n。对于预定义的组合y和n,可以替换yes使用:
printf '%s\n' y n n y y n...
Run Code Online (Sandbox Code Playgroud)
或者运行它:
/opt/MNG/MNGVIEWHP/fe/uninstall << 'EOF'
y
n
n
y
y
n
EOF
Run Code Online (Sandbox Code Playgroud)
如果您确实需要在 10 秒之前无法阅读答案,您可以这样做:
(sleep 10; echo y; sleep 2; echo n;...) | /opt/MNG/MNGVIEWHP/fe/uninstall
Run Code Online (Sandbox Code Playgroud)
但这可能没有必要,当我们写入y管道时,uninstall只要它想读取它就会在那里读取它,您不太可能需要等待它准备好读取它。例外情况是如果uninstall决定在提出问题之前刷新输入。
所有这些都假设uninstall命令只是将每个答案读取为来自其标准输入的一行输入。
对于更复杂的情况,命令直接从 tty 设备读取答案,或者您需要有条件地提供答案(例如,基于命令输出的内容),这就是您使用expect或zsh's 之类的地方zpty。
请注意,许多交互式程序在传递某些选项时可以进入某种非交互式模式。在花费太多精力解决问题之前,您可能需要先查看他们的手册。