如何编写安装程序的“是”响应脚本?

我使用 Amazon Linux 实例,我有几个脚本来填充数据并安装我使用的所有程序,但是有几个程序会问:

Do you want to continue [Y/n]?

暂停安装。我想自动回答“ Y”在所有的情况下,我只是现在知道如何做到这一点。

194385 次浏览

虽然这可能比您想要的更复杂/更重,但是一种非常灵活的方法是使用类似 期待(或其他编程语言中的一种派生物)的东西。

Expect 是一种专门设计用于控制基于文本的应用程序的语言,这正是您想要做的。如果您最终需要做一些更复杂的事情(比如使用逻辑来实际决定下一步要做什么/回答什么) ,Expect 是可行的方法。

echo y | command应该能用。

另外,一些安装程序有一个“ auto-yes”标志,它是 Ubuntu 上 apt-get-y

“是”的命令将无限期地重复“ y”(或者你让它做的任何事情)。使用它:

yes | command-that-asks-for-input

或者,如果需要大写的“ Y”:

yes Y | command-that-asks-for-input

如果你想传 N,你仍然可以使用 yes:

yes N | command-that-asks-for-input

您可能无法在目标服务器上安装 Expect。 当一个人写,比如说,詹金斯的作品时,通常就是这种情况。

如果是这样的话,我会在 askubuntu.com 上考虑下面这个问题的答案:

Https://askubuntu.com/questions/338857/automatically-enter-input-in-command-line

printf 'y\nyes\nno\nmaybe\n' | ./script_that_needs_user_input

注意,在某些罕见的情况下,该命令不要求用户在字符后面按 Enter 键。在这种情况下,省略新行:

printf 'yyy' | ./script_that_needs_user_input

为了完整起见,您还可以使用 here 文档:

./script_that_needs_user_input << EOF
y
y
y
EOF

或者如果您的 shell 支持它一个 here 字符串:

./script <<< "y
y
y
"

或者您可以创建一个每行只有一个输入的文件:

./script < inputfile

同样,这个问题的答案归功于 在 askubuntu.com 上找到答案的作者 Lesmana。

如果你只想接受默认值,你可以使用:

\n | ./shell_being_run

您只需将 -y与 install 命令放在一起。

例如: yum install <package_to_install> -y