在Linux shell脚本中处理输入确认

15

我正在编写一个Linux Shell脚本,以自动化我在Ubuntu 11.04上的一些操作。

基本上,我正在编写一个Shell脚本来安装NGINX、MySQL和PHP,然后配置所有内容。我知道如何通过命令行完成所有操作。

然而,我不知道如何处理需要用户输入的部分。例如,我用apt-get安装某些东西时会要求确认,即(Y)es或(N)o。

我应该如何在Shell脚本中自动确认选项,也就是当询问时自动确认Yes或No呢?


重复的问题?https://dev59.com/WnVC5IYBdhLWcg3wpS3f(希望能有所帮助!) - heltonbiker
@heltonbiker:我不是试图从shell脚本的用户获取输入,而是试图强制/让输入出现在我的脚本通常会提示我提供“是”或“否”响应的地方。 - ObiHill
你是对的,我读错了,抱歉。 - heltonbiker
4个回答

20

yes | ./script可以回答任何问题,并都是用字母 y.

否则,编写一个脚本打印你想要的答案,例如:

 echo N
 echo Y
 echo Y

1
谢谢您提供这个选项。但我不确定如何编写脚本来实现这一点,您有代码示例吗? - ObiHill
如果你不想总是回答“是”,我真的不明白你的问题,因为它完全取决于情况。如果你想对脚本回答“是 是 不”,只需输入以下命令:printf "y\ny\nn\n" | ./your_script 或编写一个简单的脚本来分别打印每个答案,然后:./answer_script | ./the_script - wormsparty
非常感谢。我想现在我有多个选项,以防我想对不同的提示作出不同的回答。这似乎是我想要做的最优雅的方式,因为我只需要在脚本中调用它一次即可。 - ObiHill
如果提示要求您输入非字符按键,例如“按Enter键继续”,您将回显什么? - Sledge

3
通常情况下,你可以使用一个选项来自动回答所有问题以调用这些交互式程序。例如,你可以使用 -y 来调用 apt-get。根据手册的说明:

-y, --yes, --assume-yes 自动回答是;假设对所有提示都回答“是”并以非交互方式运行。


2

该链接现在已经非常过时。有更新的文档可以在 https://wiki.debian.org/DebianInstaller/Preseed 和 Debian Installer 手册的附录B中找到,但这些对初学者来说并不是特别友好的。https://thornelabs.net/posts/debian-ubuntu-preseed-documentation-and-working-examples.html 看起来更容易理解,但也可能存在将来的链接失效问题。 - tripleee

1

试试期望,这可能是你在寻找的。


非常感谢,这看起来非常有趣。我是否需要确切地知道提示是什么,例如,如果我在我的shell脚本中运行的命令将执行类似于“输入您的出生日期:”的操作,那么我是否必须像提示要求的那样编写Expect "输入您的出生日期:"?! - ObiHill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接