Reputation: 2489
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.
Upvotes: 201
Views: 252516
Reputation: 232
Just do this:
echo y | <your_command>
For example: echo y | apt-get update
Upvotes: 0
Reputation: 13047
We could also time the sequence, with only echo
and shell substitution.
The following example dispatch y (yes), wait 3 seconds, answer n (no), wait 3 seconds, and press ENTER:
(echo -n "y"; sleep 3; echo -n "n" ; sleep 3; echo -n "\n") | program
Upvotes: 0
Reputation: 25177
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
Upvotes: 339
Reputation: 2129
You just need to put -y
with the install command.
For example: yum install <package_to_install> -y
Upvotes: 15
Reputation: 8876
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.
Upvotes: 21
Reputation: 736
If you want to just accept defaults you can use:
\n | ./shell_being_run
Upvotes: 3
Reputation: 14477
echo y | command
should work.
Also, some installers have an "auto-yes" flag. It's -y
for apt-get
on Ubuntu.
Upvotes: 99
Reputation: 52954
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.
Upvotes: 7