Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between piping a file to sh and calling a shell file

Tags:

shell

pipe

This is what was trying to do:

$ wget -qO- www.example.com/script.sh | sh

which quietly downloads the script and prints it to stdout which is then piped to sh. This unfortunately doesn't quite work, failing to wait for user input at various points, aswell as a few syntax errors.

This is what actually works:

$ wget -qOscript www.example.com/script.sh && chmod +x ./script && ./script

But what's the difference?

I'm thinking maybe piping the file doesn't execute the file, but rather executes each line individually, but I'm new to this kind of thing so I don't know.

like image 860
Peter Coulton Avatar asked Apr 29 '10 21:04

Peter Coulton


1 Answers

When you pipe to sh , stdin of that shell/script will be the pipe. Thus the script cannot take e.g. user input from the console. When you run the script normally, stdin is the console - where you can enter input.

like image 117
nos Avatar answered Oct 11 '22 13:10

nos