Respond to Prompt in Bash Script
I work on a project that requires I frequently build and destroy a virtual machine. I don't enjoy having to do so but virtual machines can be notoriously difficult to prop up, especially when you have a complex app living within it.
Manually typing the same commands over and over can be mind-numbing so I've create a bash script to handle all of the work for me. One hiccup to the process is needing to confirm removal of an existing virtual machine; using a pipe and echo allows me to answer the prompt:
# ... some directives here
# Remove the machine, confirming "y" when asked by docker-machine
echo 'y' | docker-machine rm default
# ... more directives here
Using echo I pipe a y response to docker-machine's confirmation prompt, thus allowing the script to move forward with other tasks without the need for manual intervention.
I don't, however, know how to handle multiple prompts -- can you tell me and everyone else?
![7 Essential JavaScript Functions]()
I remember the early days of JavaScript where you needed a simple function for just about everything because the browser vendors implemented features differently, and not just edge features, basic features, like addEventListener and attachEvent. Times have changed but there are still a few functions each developer should...
![9 Mind-Blowing Canvas Demos]()
The <canvas> element has been a revelation for the visual experts among our ranks. Canvas provides the means for incredible and efficient animations with the added bonus of no Flash; these developers can flash their awesome JavaScript skills instead. Here are nine unbelievable canvas demos that...
![Ana Tudor’s Favorite CodePen Demos]()
Cocoon
I love canvas, I love interactive demos and I don't think I have ever been more impressed by somebody's work than when I discovered what Tiffany Rayside has created on CodePen. So I had to start off with one of her interactive canvas pens, even though...
![MooTools Wall Plugin]()
One of the more impressive MooTools plugins to hit the Forge recently was The Wall by Marco Dell'Anna. The Wall creates an endless grid of elements which can be grabbed and dragged, fading in elements as they are encountered. Let me show...
As far as I know this is usually done with the yes command:
This should also respond to multiple prompts.
Ah yes, I did experiment with that. But what if I know the multiple prompt responses should be “y”, “n”, “3”? That would be useful.
To expand on what Andreas said, you can build a canned file of responses, one per line (extra blanks for the equivalent of hitting enter) and sending that to your program:
Can’t you stream a file in? Like in
Try a here string.
while IFS= read -r; do echo "E- $REPLY" done <<<"y n 3"Will print the three lines of responses. Assuming the docker prompt is similar to read it should work.
The ‘expect’ utility can be installed on most Linux boxes.
https://en.wikipedia.org/wiki/Expect
I agree about ‘expect’ as Rohit mentions, it’s usually what you resort to when piping doesn’t work for different reasons (such as passwords being read from physical terminal only, input being prematurely consumed by a loop, etc).
The tool is {advanced|complicated} enough to maybe warrant a future post ;-)
In my team we use Vagrant and Ansible to do these kinds of things. They are very helpful tool for popping up a dev env with customized apps / configs.
I have not tried Ansible for Docker but there is a page for it https://www.ansible.com/docker