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 прежде чем запускать какой-либо уязвимый код.

Другие вопросы по тегам