GVM возвращает ошибку при запуске в bash-скрипте
Я запускаю сценарий установки для установки Grails на новые машины с GVM.
#!/bin/bash
set -e
source "/Users/mecca831/.gvm/bin/gvm-init.sh"
echo "Install grails"
gvm install grails 2.1.1
GVM возвращает 1 в этом случае, что нарушает мой сценарий. Тем не менее, скрипт работает, если set -e
устранен. Возвращает 0, и появится правильное приглашение. Кто-нибудь сталкивался с той же проблемой, пытаясь установить Grails с GVM?
1 ответ
Нетривиальные сценарии должны быть специально написаны для запуска с set -e
,
gvm-init.sh
не был написан, чтобы разрешить это, и разрывается, когда он включен.
Рассмотрим для примера этот раздел:
GVM_DETECT_HTML="$(echo "$GVM_RESPONSE" | tr '[:upper:]' '[:lower:]' | grep 'html')"
if [[ -n "$GVM_DETECT_HTML" ]]; then
...
В любом случае, это не хороший или идиоматичный код bash, но он сам по себе работает достаточно хорошо. Он находит строки, содержащие "html", и вставляет их в переменную. Затем он проверяет, является ли переменная пустой или нет.
Однако при включении set -e
сценарий завершается, если переменная будет пустой, прежде чем сценарий сможет взглянуть на нее и объяснить это.
С этим ничего не поделаешь, кроме переписывания gvm-init.sh
или же set +e
прежде чем запускать какой-либо уязвимый код.