
Эта функция должна завершить работу вызывающего скрипта:
crash() {
echo error
exit 1
}
Это работает так, как и ожидалось:
echo before
crash
echo after # execution never reaches here
Но это не так:
echo before
x=$(crash) # nothing is printed, and execution continues
echo after # this is printed
Как захватить результат функции, а также разрешить ей завершиться?
решение1
Это происходит потому, что $(crash)
выполняется crash
в подоболочке, поэтому exit
применяется к подоболочке, а не к вашему скрипту.
Какой смысл сохранять вывод в переменной, если вы не будете ее использовать, поскольку скрипт все равно завершится?
решение2
Это должно решить вашу проблему:
echo before
x=$(crash) || exit # if crash give -gt 0 value then exit with the same value
echo after