我已經安裝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 啟動檔 ( /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