Захват кода завершения скрипта-источника без прерывания текущего скрипта - PullRequest
0 голосов
/ 31 января 2020

У меня есть два сценария оболочки:

test. sh

function func() {
echo $1
exit 1
}

run. sh

source ./test.sh

func "Hello"
exitCode=$?
echo "Output: ${exitCode}"

Результат:

Hello

Текущая проблема, с которой я сталкиваюсь, заключается в том, что когда функция fun c возвращает 1, мой запуск. sh скрипт прерывается и после него ничего не выполняется. Итак, есть ли способ, которым я могу эффективно захватить код выхода, не прерывая работу. sh. Поскольку я не могу изменить тестовый сценарий. sh, я должен найти способ сделать это во время выполнения. sh. Я пытался использовать flock для выполнения скрипта, но не смог заставить его работать.

1 Ответ

2 голосов
/ 31 января 2020

Если вам не нужны изменения среды, вы можете запустить функцию в подоболочке. Это делает exit применимым только к ( .. ), а не к вашему основному сценарию:

source ./test.sh

( func "Hello" )
exitCode=$?
echo "Output: ${exitCode}"
...