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

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

Do you want to continue [Y/n]? 

并暂停安装。 我想在所有情况下自动回答“Y”,现在我确定如何去做。

'yes'命令会无限期地回应'y'(或者你要求的任何东西)。 使用它作为:

 yes | command-that-asks-for-input 

或者,如果需要大写'Y':

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

echo y | command echo y | command应该工作。

此外,一些安装程序有一个“自动是”的标志。 这是Ubuntu的apt-get

//,您可能无法在目标服务器上安装Expect。 当人们写一个Jenkins的工作时,情况往往是这样的。

如果是这样,我会考虑像askubuntu.com上的以下答案:

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

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

请注意,在一些极less数情况下,该命令不需要用户在字符后面按Enter键。 在这种情况下留下换行符:

 printf 'yyy' | ./script_that_needs_user_input 

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

 ./script_that_needs_user_input << EOF y y y EOF 

或者如果你的shell支持这里string:

 ./script <<< "y y y " 

或者你可以创build一个文件,每行一个input:

 ./script < inputfile 

再次,这个答案的所有功劳都来自askubuntu.com @lesmana上的答案的作者。

虽然这可能比你想要的更复杂/更重,但是一个非常灵活的方法是使用诸如Expect (或另一种编程语言中的衍生工具之一)之类的东西。

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