【发布时间】: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 的作用。
【问题讨论】:
curl -sL https://deb.nodesource.com/setup_8.x | bash -
apt-get install -yq nodejs
我们正在使用这个命令来更新节点。我在终端中只运行了bash -,它刚刚返回了一个新行。我在网上查看过,无法找到或理解在我们的 update.sh 文件中添加 bash - 到 apt-get 的作用。
【问题讨论】:
在您的代码中,第一行从节点服务器下载脚本。它是一个 Bash 脚本,Curl 会将其打印到标准输出,因此我们使用管道运算符将其发送到 Bash。破折号 (-) 是告诉程序应该从标准输入而不是从文件中读取的标准方法。管道操作符的工作原理是将命令的标准输出作为标准输入发送到下一个,因此 Bash 将从输入中接收从 Node 服务器下载的脚本,并将其视为文件,因此它将执行它。
如果您要在结尾不带| bash - 的情况下运行命令,您会在终端中看到一个很长的 Bash 脚本。如果您尝试运行echo "echo Hi" | bash -,您将在终端中看到“Hi”,因为您首先在屏幕上打印echo Hi,然后将其发送到 Bash 执行它,它将打印“Hi”。
第二个命令使用包管理器定期安装 Node.js。
所以基本上你是从 Node 服务器上运行一个脚本来执行一些预安装任务(可能是从 Node 添加 apt 密钥并安装依赖项),然后你实际上是在安装 Node.js。
【讨论】:
curl -sL https://deb.nodesource.com/setup_8.x | bash - && apt-get install -yq nodejs。 & 号是不可协商的,否则,当 bash 尝试将 apt-get 二进制文件解析为脚本时,你会得到一个错误。
bash之前和apt-get之后有**?
curl -sL https://deb.nodesource.com/setup_8.x | bash - && apt-get install -yq nodejs | bash - && apt-get install npm@latest-version 吗?我可以跳过 bash -,因为我们已经在那里了吗?