【问题标题】:Why does this not work to configure node using nvm and yarn on remote VM?为什么在远程 VM 上使用 nvm 和 yarn 配置节点不起作用?
【发布时间】:2017-01-06 21:49:14
【问题描述】:

我正在尝试使用脚本自动化 VM 配置,但在访问在 ~/.bashrc~/.bash_profile~/.profile 中设置的某些路径变量时遇到了一些问题。

我的远程虚拟机正在运行 ubuntu 14.04 LTS,我正在通过 ssh 进行部署。

这是连接在一起以作为 bash 命令运行以通过安装 nvm 来配置 vm 的数组:

返回 [ rm -rf ~/.nvm, sudo apt-get update, sudo apt-get install -y build-essential libssl-dev, curl -sL https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh -o install_nvm.sh, bash install_nvm.sh, echo "source ~/.nvm/nvm.sh" >> ~/.bash_profile ].join('\n');

return [
      `rm -rf ~/.nvm`,
      `sudo apt-get update`,
      `sudo apt-get install -y build-essential libssl-dev`,
      `curl -sL https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh -o install_nvm.sh`,
      `bash install_nvm.sh`,
      `echo "source ~/.nvm/nvm.sh" >> ~/.bash_profile`
    ].join('\n');

但是当我运行下一个实际安装节点和纱线的脚本时,它找不到nvm

return [
      `nvm install ${config.node.version}`,
      `nvm use ${config.node.version}`,
      `echo "using node $(node -v) and npm $(npm -v)"`,
      `curl -o- -L https://yarnpkg.com/install.sh | bash`,
      'echo "export PATH="$HOME/.yarn/bin:$PATH"" >> ~/.bash_profile',
    ].join('\n');

这是错误: bash:nvm:找不到命令

bash: line 1: nvm: command not found`

我不想通过 ssh 进入并手动将任何内容添加到任何各种配置文件中。我希望这一切都由脚本完成。我还想避免在 ssh 会话开始时采购 ~/.nvm/nvm.sh 或采购任何配置文件。我的印象是 ssh 会话会自动获取~/.bash_profile,然后应该从这些变量中读取正确吗?如果没有,那么我还能如何配置我的部署脚本以自动访问这些变量?

【问题讨论】:

  • 您是否已经确认在运行第二组命令时已安装nvm?只是想确定它应该存在。此外,对于您正在炮击的用户,您是否确保用户的 shell 设置为 /bin/bash 而不是 /bin/sh 之类的东西?
  • 所以第二个命令在第一个脚本之后作为 && 运行(节点进程从第一个脚本中退出 0),所以它应该已经安装了。至于用户shell,我该如何确认?
  • 还有为什么这很重要?
  • 这很重要,因为它可能没有路径中需要的东西。您可以从 .bash_profile 脚本中获取 ~/.nvm/nvm.sh 源代码。

标签: node.js bash ssh nvm


【解决方案1】:

基于您在 cmets 中所说的使用 && 的事实,我将在运行 nvm 命令之前在实际 source ~/.nvm/nvm.sh 添加一行。在运行之前,您可能在 shell 中没有可用的命令。

改变这个:

return [
      `rm -rf ~/.nvm`,
      `sudo apt-get update`,
      `sudo apt-get install -y build-essential libssl-dev`,
      `curl -sL https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh -o install_nvm.sh`,
      `bash install_nvm.sh`,
      `echo "source ~/.nvm/nvm.sh" >> ~/.bash_profile`
    ].join('\n');

到这里:

return [
      `rm -rf ~/.nvm`,
      `sudo apt-get update`,
      `sudo apt-get install -y build-essential libssl-dev`,
      `curl -sL https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh -o install_nvm.sh`,
      `bash install_nvm.sh`,
      `echo "source ~/.nvm/nvm.sh" >> ~/.bash_profile`,
      `source ~/.nvm/nvm.sh`
    ].join('\n');

【讨论】:

  • 我知道获取 nvm 可执行文件将使我能够访问它。我想写一个我不需要这样做的脚本,就像我在本地使用 nvm 时不需要那样
猜你喜欢
  • 2015-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-07
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多