У меня есть сценарий Bash, который является источником. Когда этот скрипт создан, он запускает функцию в сценарии Bash. Эта функция должна прекращать выполнение скрипта, если выполняется определенное условие. Как это можно сделать, не прерывая оболочку, в которой работает сценарий?Как вырваться из исходной функции скрипта Bash
Чтобы быть ясным: я хочу, чтобы действие завершения было завершено функцией в сценарии исходной оболочки, а не в основной части исходного сценария оболочки. Проблемы, которые я вижу, это то, что return
просто возвращается из функции в основную часть скрипта, а exit 1
завершает вызывающую оболочку.
Следующий минимальный пример иллюстрирует проблему:
main(){
echo "starting test of environment..."
ensure_environment
echo "environment safe -- starting other procedures..."
}
ensure_environment(){
if [ 1 == 1 ]; then
echo "environment problemm -- terminating..."
# exit 1 # <-- terminates calling shell
return # <-- returns only from function, not from sourced script
fi
}
main
Выполнение сценария вместо этого. Таким образом, 'exit' выйдет из подоболочки, в которой он запущен. – fedorqui
Интересно. Не могли бы вы дать небольшой пример для начала, который можно было бы улучшить. Например. который завершает оболочку. –
Вы просите что-то, что невозможно. Вы должны перестроить свой код. –