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

Почему это?

В конечном итоге я хочу использовать nvm в команде RoboFile exec() и пытаюсь обернуть ее в , bash -cпоскольку nvmэто функция bash, а не настоящий скрипт.

решение1

Почему это?

При вызове с помощью -cbash запускается какнеинтерактивный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

Связанный контент