我正在尝试编写一些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
?
答案 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