从脚本安装后,Bash重新加载以查找可执行文件

时间:2018-11-08 11:29:42

标签: node.js bash shell nvm

我正在尝试编写一些Shell脚本来安装nvm,然后安装.nvmrc文件中指定的节点版本。 nvm的安装似乎已成功,但是我无法调用nvm install,因为$(command -v nvm)没有输出。同样在终端中,我从nvm install.sh脚本中获得了消息:

  

=>关闭并重新打开终端以开始使用nvm或运行以下命令以立即使用它:

#!/bin/bash

if ! [ -x "$(command -v nvm)" ]; then
  echo 'Installing Node version manager (http://nvm.sh).' >&2
  curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
fi

source ~/.bash_profile
source ~/.bashrc

if [ -x "$(command -v nvm)" ]; then
  nvm install
  exit
fi
exit 1

如何在bash脚本中使用命令nvm

1 个答案:

答案 0 :(得分:1)

如果您想使用脚本给出的命令简单地修改环境,而无需重新加载整个概要文件,请使用:

eval "$(curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash | grep -E -v "^.?=>")"

grep将删除以=>开头的注释,并可能删除前导隐藏字符。 eval将在当前shell中执行命令。

然后不要使用-x,因为command -v nvm返回nvm而不是完整路径。

if [ -n "$(command -v nvm)" ]; then
  nvm install
  exit $?
fi

然后按照三元组建议使用裸露的exit来保留返回代码。

脚本变为:

#!/bin/bash

if ! [ -n "$(command -v nvm)" ]; then
  echo 'Installing Node version manager (http://nvm.sh).' >&2
  eval "$(curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash | grep -E -v "^.?=>")"
fi

if [ -n "$(command -v nvm)" ]; then
  nvm install
  exit
fi
exit 1