Bash: Execute piped lines from stdin

bashpipescriptingshell

I haven't found a solution to this after some searching. I think the search terms are just too general. I'd like to know how to execute a number of lines (at the bash prompt) which are generated by some other source. For example, I have a Python script which dynamically generates a number of bash commands and prints them to stdout. I'd like those lines to be executed as a bash script without having to save them to disk. For example:

$ python example.py
touch 1 2 3 4 5
rm 1 2 3 4 5
echo "Done"

I'd like to do something like:

$ python example.py | executeLines

Does such a command/feature exist in bash? Sometimes one of the commands may exit with a non-zero exit status, so appending && to each command and then running:

$ `python example.py`

will not always work and seems to be a clumsy solution.

Best Answer

Have you tried

$ python example.py | bash

It ought to work, as it's a common enough trick. For example, the monitoring tool munin has a node configurator (munin-node-configure) that tells you what plugins you can run, and then takes a --shell flag that makes it spit out a bunch of ln -s commands to link in the plugins, when piped directly to bash.

There was even once a tool for configuring something - it was over 15 years ago, I can't remember what - where you'd become root and get the config done by opening a telnet session to an autoconfigurator and send the output straight to bash, with

# telnet example.com 7001 | bash

I can't imagine doing anything like that these days.