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


14

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

我做了这个例子,但是没有用-

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

任何的想法?Centos的7.2


6
ITYM,#! /bin/bash -而不是#!/usr/bin
斯特凡Chazelas

检查uninstall程序是否接受参数或配置脚本。这样会更容易
phuclv

1
在网络上询问和回答广告恶心。“ 它不起作用”不是对问题的一个很好的解释。也许您可以说明自己的问题与无数其他问题有何不同。

2
您的脚本实际执行的操作:运行uninstall并等待其退出。然后睡觉10秒钟。然后回显y\n到stdout(仍然连接到终端,而不是任何程序的stdin)
Peter Cordes

Answers:


47

这就是yes命令的目的。它会y无限期地每行输出s,因此可以通过管道将其发送给询问是/否问题的命令。

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

那回答y了所有问题。要回答n所有问题,请替换yesyes n。对于预定义的组合yn,可以替换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设备读取的答案或者你需要饲料答案有条件(基于什么命令输出实例),这就是你要使用的东西,像expectzshzpty

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


谢谢!如果我们只需要回答一个问题,这很好。例如,如果我们必须回答20个问题,会怎样?
Shalev Sason

@Shalev,请参阅编辑。
斯特凡Chazelas

谢谢 !因此,如果我想输入另一个值,例如整数(例如2),我需要替换它而不是“ y”吗?printf'%s \ n'ynnyyn 2 3 ny | / opt / MNG / MNGVIEWHP / fe / uninstall
Shalev Sason

是的,就是这个主意。
斯特凡Chazelas

3
@ShalevSason,在我提供的所有解决方案中,例如echo "y",每次,我们都编写y<newline>,模拟您按并按yEnter。如果要模拟单独按Enter键,那将输入空行,因此printf '%s\n' y n '' 2 3(其中''是空行)。
斯特凡Chazelas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.