【问题标题】:What does "bash - apt-get" do differently from just "apt-get" in this command?“bash - apt-get”与此命令中的“apt-get”有何不同?
【发布时间】:2019-10-06 05:48:05
【问题描述】:
curl -sL https://deb.nodesource.com/setup_8.x | bash -
apt-get install -yq nodejs

我们正在使用这个命令来更新节点。我在终端中只运行了bash -,它刚刚返回了一个新行。我在网上查看过,无法找到或理解在我们的 update.sh 文件中添加 bash -apt-get 的作用。

【问题讨论】:

    标签: bash apt-get


    【解决方案1】:

    在您的代码中,第一行从节点服务器下载脚本。它是一个 Bash 脚本,Curl 会将其打印到标准输出,因此我们使用管道运算符将其发送到 Bash。破折号 (-) 是告诉程序应该从标准输入而不是从文件中读取的标准方法。管道操作符的工作原理是将命令的标准输出作为标准输入发送到下一个,因此 Bash 将从输入中接收从 Node 服务器下载的脚本,并将其视为文件,因此它将执行它。

    如果您要在结尾不带| bash - 的情况下运行命令,您会在终端中看到一个很长的 Bash 脚本。如果您尝试运行echo "echo Hi" | bash -,您将在终端中看到“Hi”,因为您首先在屏幕上打印echo Hi,然后将其发送到 Bash 执行它,它将打印“Hi”。

    第二个命令使用包管理器定期安装 Node.js。

    所以基本上你是从 Node 服务器上运行一个脚本来执行一些预安装任务(可能是从 Node 添加 apt 密钥并安装依赖项),然后你实际上是在安装 Node.js。

    【讨论】:

    • 换行可能是我的错,抱歉。 OP 将它放在源代码的两行不同的行上,但没有格式化为代码,因此它全部显示在一行上。我已将其重新编辑以显示两行。
    • @melpomene,我直接从我们的 update.sh 文件中复制了它。你能告诉我代码是否在一行上,它会写成“bash - apt-get”还是“bash -apt-get”?还要感谢 Marc Sances 的快速响应和彻底的回答。
    • 如果你真的想把它作为一个单行,它应该是:curl -sL https://deb.nodesource.com/setup_8.x | bash - && apt-get install -yq nodejs。 & 号是不可协商的,否则,当 bash 尝试将 apt-get 二进制文件解析为脚本时,你会得到一个错误。
    • @CurtisM 如果是直接复制,为什么在bash之前和apt-get之后有**
    • @MarcSances 如果我要在 bash - && apt-get install -yq nodejs 之后添加另一个命令。我会添加curl -sL https://deb.nodesource.com/setup_8.x | bash - && apt-get install -yq nodejs | bash - && apt-get install npm@latest-version 吗?我可以跳过 bash -,因为我们已经在那里了吗?
    猜你喜欢
    • 2017-05-08
    • 2016-08-28
    • 2017-07-04
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多