205

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.

1
  • 3
    The package manager might have a --noprompt or --noconfirm flag you can use. Commented Oct 4, 2011 at 2:42

8 Answers 8

345

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 
Sign up to request clarification or add additional context in comments.

8 Comments

does this only work with some command supported to use input from yes, doesn't it? I tried with glance from OpenStack and this not work, I think Expect is more precise for all circumstances
// , What if you have to enter the full word "yes"?
Be careful with yes as it is known to max out the CPU. stackoverflow.com/a/18164007/720665
Nice. This just made my life substantially easier. :D. Also googling -y for bash scripts was HARD.
@DavidSalamon that's only the case when it's writing to something without limit, like /dev/null or STDOUT. Piped to a command, it will only write one line to the pipe each time the receiving command reads one, and will wait otherwise.
|
101

echo y | command should work.

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

5 Comments

I am trying to to do echo "giturl no" | jspm registry create registry_name jspm-git in my shell script. but it keeps on failing. while entering the giurl. Any idea?
Another example: In docker-compose there is -f (--force) flag which works as "auto-yes" for commands that remove something
How do you "echo Y" recursively in case the prompt asks for a confirmation more than once?
This is also useful for pip. ex: echo y | pip uninstall psycopg2-binary
This worked for me while using yes | foo did not. I needed to run a command like this multiple times in my automation. the yes | foo approach broke after one command was run. The echo Y | foo approach worked for each line!
22

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.

2 Comments

// , Please be sure to upvote the askubuntu.com user @lesmana if you like this answer.
Is there a way we can also make this use the arrow keys for multiple choice?
15

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

For example: yum install <package_to_install> -y

Comments

7

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.

Comments

3

If you want to just accept defaults you can use:

\n | ./shell_being_run 

2 Comments

// , How does this mean that you would be accepting defaults?
In bash, sh and most system, which I know, you need to echo the \n otherwise it would not be piped to the next command.
1

Just do this:

echo y | <your_command>

For example: echo y | apt-get update

Comments

0

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 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.