bash -c nvm 不起作用

bash -c nvm 不起作用

我已经安装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

相关内容