通过管道将文件传输到 sh 和调用 shell 文件之间的区别

发布于 2024-08-31 07:05:44 字数 372 浏览 3 评论 0原文

这就是我们想要做的:

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

它悄悄地下载脚本并将其打印到 stdout,然后通过管道传输到 sh。不幸的是,这并不完全有效,无法在各个点等待用户输入,以及一些语法错误。

这实际上是有效的:

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

但是有什么区别呢?

我想也许管道文件不会执行该文件,而是单独执行每一行,但我对这种事情很陌生,所以我不知道。

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

千笙结 2024-09-07 07:05:44

当您通过管道连接到 sh 时,该 shell/脚本的标准输入将是管道。因此,该脚本无法从控制台获取用户输入等。当您正常运行脚本时,stdin 是控制台 - 您可以在其中输入输入。

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.

生生漫 2024-09-07 07:05:44

您可以尝试告诉 shell 进行交互:

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

You might try telling the shell to be interactive:

$ wget -qO- www.example.com/script.sh | sh -i
旧竹 2024-09-07 07:05:44

我遇到了同样的问题,经过修补和谷歌搜索后,这对我有用。

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

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

wget -O - www.example.com/script.sh | sh
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文