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


这是尝试做的事情:

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

然后悄悄地下载脚本并将其打印到stdout,然后将其传送到sh。遗憾的是,它不能正常工作,无法在各个点等待用户输入,以及一些语法错误。

这实际上是有效的:

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

但有什么区别?

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


12837
2018-04-29 21:24


起源

你的脚本实际上可能需要来自sh的不同shell,比如bash,如果你执行它,将检查shebang线,如果你管它,它不会 - flownt
我想到了这一点,但将它直接用于bash并没有解决它。 - Peter Coulton


答案:


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


8
2018-04-29 21:47



这完全合情合理。非常感谢你。 - Peter Coulton


您可以尝试告诉shell是交互式的:

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

2
2018-05-02 04:15



对我不起作用。 - Jeroen Fiege


我有同样的问题,在修补和谷歌搜索后,这对我有用。

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

0
2018-03-01 08:53