• Uncategorized

About shell : Difference-between-piping-a-file-to-sh-and-calling-a-shell-file

Question Detail

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.

Question Answer

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.

You might try telling the shell to be interactive:

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

I had the same issue, and after tinkering and googling this is what worked for me.

wget -O - www.example.com/script.sh | sh

You may also like...

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.