我已经安装nvm
,它被附加到我的/home/www-data/.bashrc
呼叫nvm
有效。
bash
nvm
作品
但
$ bash -c nvm
bash: nvm: command not found
不起作用。
当我指定 rcfile 时也是一样
$ bash --rcfile /home/www-data/.bashrc -c "nvm"
bash: nvm: command not found
这是为什么?
最终,我想在 RoboFile exec() 命令中使用 nvm,并尝试将其包装进去,bash -c
因为nvm
它是一个 bash 函数而不是真正的脚本。
答案1
这是为什么?
当使用以下方式调用时-c
,bash 将作为非交互式shell。默认的交互式 shell 启动文件(/etc/bash.bashrc
、~/.bashrc
)不会被读取。即使你强制~/.bashrc
读取,其主体也可能不会被执行 - 例如,默认的 Ubuntu 启动文件(在创建帐户期间从 /etc/skel 复制)包含以下行
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
它将绕过接下来的所有内容。
你可以强制使用交互式 shell bash -ic
,但是这可能会导致其他问题,具体取决于您的.bashrc
.
答案2
尝试
bash -ic nvm
将 bash 作为交互式 shell 运行和提供的命令似乎不符合 bash 文档,但它有效。
答案3
我换成了https://www.npmjs.com/package/n在这种情况下效果更好。
它是 bash 脚本的替代品nvm
,不需要所有那些脚本。这就是为什么它也可以正常工作,而不会出现上述问题。
n
可以使用以下命令进行安装:
npm install -g n