Перезагрузка Bash, чтобы найти исполняемый файл после установки из скрипта - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь написать небольшой скрипт для установки nvm, а затем установить версию узла, указанную в файле .nvmrc. Установка nvm кажется успешной, но я не могу назвать nvm install, потому что $(command -v nvm) не имеет выхода. Также в терминале я получаю сообщение от скрипта nvm install.sh:

=> Закройте и снова откройте свой терминал, чтобы начать использовать nvm, или запустите следующее, чтобы использовать его сейчас:

#!/bin/bash

if ! [ -x "$(command -v nvm)" ]; then
  echo 'Installing Node version manager (http://nvm.sh).' >&2
  curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
fi

source ~/.bash_profile
source ~/.bashrc

if [ -x "$(command -v nvm)" ]; then
  nvm install
  exit
fi
exit 1

Как использовать команду nvm в скрипте bash?

1 Ответ

0 голосов
/ 08 ноября 2018

Если вы хотите просто изменить среду с помощью команды, заданной сценарием, без перезагрузки всего профиля, используйте:

eval "$(curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash | grep -E -v "^.?=>")"

grep удалит комментарии, начинающиеся с => и, возможно, ведущий скрытый символ. eval выполнит команды в текущей оболочке.

, затем не используйте -x, поскольку command -v nvm возвращает nvm, а не полный путь.

if [ -n "$(command -v nvm)" ]; then
  nvm install
  exit $?
fi

И, следуя тройному совету, используйте exit, чтобы сохранить код возврата.

Сценарий становится:

#!/bin/bash

if ! [ -n "$(command -v nvm)" ]; then
  echo 'Installing Node version manager (http://nvm.sh).' >&2
  eval "$(curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash | grep -E -v "^.?=>")"
fi

if [ -n "$(command -v nvm)" ]; then
  nvm install
  exit
fi
exit 1
...