Я установил 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
Почему это?
В конечном итоге я хочу использовать nvm в команде RoboFile exec() и пытаюсь обернуть ее в , 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
который обходит все последующее.
Тымогпринудительно использовать интерактивную оболочку с помощью bash -ic
, однако это может вызвать другие проблемы в зависимости от того, что еще находится в вашем .bashrc
.
решение2
Пытаться
bash -ic nvm
Запуск bash как интерактивной оболочкиипредоставление команды, похоже, не соответствует документации bash, но это работает.
решение3
Я переключился наhttps://www.npmjs.com/package/nчто в данном случае работает гораздо лучше.
Это альтернатива nvm
и не требует всех этих скриптов bash. Вот почему это, вероятно, работает также без вышеупомянутых проблем.
n
можно установить с помощью следующей команды:
npm install -g n