如何为安装程序编写"是"响应脚本?

use*_*887 96 linux bash scripting

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

Do you want to continue [Y/n]?
Run Code Online (Sandbox Code Playgroud)

并暂停安装.我想在所有情况下自动回答"Y",我现在才确定如何做到这一点.

P.T*_*.T. 181

"是"命令将呼应"Y"(或任何你问它)无限期.用它作为:

yes | command-that-asks-for-input
Run Code Online (Sandbox Code Playgroud)

或者,如果需要资本'Y':

yes Y | command-that-asks-for-input
Run Code Online (Sandbox Code Playgroud)

  • @NathanBasanese运行命令'yes yes' (4认同)
  • @DavidSalamon 仅当它无限制地写入某些内容时才会出现这种情况,例如`/dev/null` 或 STDOUT。管道到命令,每次接收命令读取一行时,它只会向管道写入一行,否则将等待。 (2认同)

Den*_*nis 60

echo y | command 应该管用.

此外,一些安装程序具有"auto-yes"标志.它-y适用apt-get于Ubuntu.


Nat*_*ese 15

您可能无法在目标服务器上安装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
Run Code Online (Sandbox Code Playgroud)

请注意,在极少数情况下,该命令不要求用户在字符后按Enter键.在这种情况下,请删除换行符:

printf 'yyy' | ./script_that_needs_user_input
Run Code Online (Sandbox Code Playgroud)

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

./script_that_needs_user_input << EOF
y
y
y
EOF
Run Code Online (Sandbox Code Playgroud)

或者如果你的shell支持这里的字符串:

./script <<< "y
y
y
"
Run Code Online (Sandbox Code Playgroud)

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

./script < inputfile
Run Code Online (Sandbox Code Playgroud)

同样,这个答案的所有功劳都归到了askubuntu.com,lesmana 上答案的作者.


小智 9

你只需要把 -y使用安装命令即可。

例如: yum install <package_to_install> -y


Ada*_*kin 5

虽然这可能比你想要的更复杂/更重,但是一种非常灵活的方法是使用Expect(或其他编程语言中的衍生物之一).

Expect是一种专门用于控制基于文本的应用程序的语言,这正是您要做的.如果你最终需要做一些更复杂的事情(比如用逻辑来实际决定接下来要做什么/回答什么),那么Expect就是你要走的路.