Захватить результат функции bash и разрешить ей выйти

Захватить результат функции bash и разрешить ей выйти

Эта функция должна завершить работу вызывающего скрипта:

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

Связанный контент