How do I script a "yes" response for installing programs?

LinuxBashScripting

Linux Problem Overview


I work with Amazon Linux instances and I have a couple scripts to populate data and install all the programs I work with, but a couple of the programs ask:

Do you want to continue [Y/n]?

and pause the install. I want to auto answer "Y" in all cases, I'm just now sure how to do it.

Linux Solutions


Solution 1 - Linux

The 'yes' command will echo 'y' (or whatever you ask it to) indefinitely. Use it as:

yes | command-that-asks-for-input

or, if a capital 'Y' is required:

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

If you want to pass 'N' you can still use yes:

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

Solution 2 - Linux

echo y | command should work.

Also, some installers have an "auto-yes" flag. It's -y for apt-get on Ubuntu.

Solution 3 - Linux

You might not have the ability to install Expect on the target server. This is often the case when one writes, say, a Jenkins job.

If so, I would consider something like the answer to the following on askubuntu.com:

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

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

Note that in some rare cases the command does not require the user to press enter after the character. in that case leave the newlines out:

printf 'yyy' | ./script_that_needs_user_input

For sake of completeness you can also use a here document:

./script_that_needs_user_input << EOF
y
y
y
EOF

Or if your shell supports it a here string:

./script <<< "y
y
y
"

Or you can create a file with one input per line:

./script < inputfile

Again, all credit for this answer goes to the author of the answer on askubuntu.com, lesmana.

Solution 4 - Linux

You just need to put -y with the install command.

For example: yum install <package_to_install> -y

Solution 5 - Linux

Although this may be more complicated/heavier-weight than you want, one very flexible way to do it is using something like Expect (or one of the derivatives in another programming language).

Expect is a language designed specifically to control text-based applications, which is exactly what you are looking to do. If you end up needing to do something more complicated (like with logic to actually decide what to do/answer next), Expect is the way to go.

Solution 6 - Linux

If you want to just accept defaults you can use:

\n | ./shell_being_run

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser974887View Question on Stackoverflow
Solution 1 - LinuxP.T.View Answer on Stackoverflow
Solution 2 - LinuxDennisView Answer on Stackoverflow
Solution 3 - LinuxNathan BasaneseView Answer on Stackoverflow
Solution 4 - LinuxRohan SethView Answer on Stackoverflow
Solution 5 - LinuxAdam BatkinView Answer on Stackoverflow
Solution 6 - LinuxwarhansenView Answer on Stackoverflow