【问题标题】:Difference between piping a file to sh and calling a shell file将文件传送到 sh 和调用 shell 文件之间的区别
【发布时间】:2010-04-29 21:24:22
【问题描述】:

这是试图做的:

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

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

这是真正有效的:

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

但是有什么区别呢?

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

【问题讨论】:

  • 您的脚本实际上可能需要与 sh 不同的 shell,例如 bash,如果您执行它,则会检查 shebang 行,如果您通过管道传输它,则不会
  • 我想到了,但是直接用管道传送到 bash 并没有解决它。

标签: shell pipe


【解决方案1】:

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

【讨论】:

  • 这完全有道理。非常感谢。
【解决方案2】:

您可以尝试让 shell 进行交互:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-07
      • 2012-02-17
      • 2011-09-03
      • 2022-06-28
      • 2012-04-18
      • 2015-05-17
      相关资源
      最近更新 更多