Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Run a script piped from stdin (Linux/Shell Scripting)

Suppose I have a script: my_script.sh

Instead of doing

./my_script.sh

I want to do something like:

cat my_script.sh | <some command here>

such that the script executes. Is this possible?

The use case is if the script I want to execute is the output of a wget or s3cat, etc. Right now I save it to a temporary file, change it to executable, and then run it. Is there a way to do it directly?

like image 582
Switch Avatar asked Apr 01 '12 16:04

Switch


2 Answers

Just pipe it to your favorite shell, for example:

$ cat my_script.sh
set -x
echo hello
$ cat my_script.sh | sh
+ echo hello
hello

(The set -x makes the shell print out each statement it is about to run before it runs it, handy for debugging, but it has nothing to do with your issue specifically - just there for demo purposes.)

like image 130
Mat Avatar answered Oct 10 '22 15:10

Mat


You could use stdin from pipe:

cat my_script.sh | xargs -i <some_command> {}

or:

cat my_script.sh | bash -

or (just from stdin):

bash < my_script.sh
like image 25
Mihai Avatar answered Oct 10 '22 14:10

Mihai