管道文件到sh和调用shell文件之间的区别

Pet*_*ton 11 shell pipe

这是尝试做的事情:

$ wget -qO- www.example.com/script.sh | sh
Run Code Online (Sandbox Code Playgroud)

它会安静地下载脚本并将其打印到stdout,然后通过管道输出到sh.遗憾的是,它不能正常工作,无法在各个点等待用户输入,以及一些语法错误.

这实际上是有效的:

$ wget -qOscript www.example.com/script.sh && chmod +x ./script && ./script
Run Code Online (Sandbox Code Playgroud)

但有什么区别?

我想也许管道文件不执行文件,而是单独执行每一行,但我是这种事情的新手,所以我不知道.

nos*_*nos 8

当您管道时sh,该shell /脚本的stdin将成为管道.因此,脚本不能从控制台获取例如用户输入.正常运行脚本时,stdin是控制台 - 您可以在其中输入输入.