Используйте коды выхода для передачи этой информации. Если вы хотите следовать соглашениям , вы можете использовать, например, код
EX_DATAERR=65
, чтобы сообщить об ошибке синтаксического анализа. вашему родительскому процессу:
exit "$EX_DATAERR"
case "$?" in #$? is the exit code of the last exited child
0) echo 'Child has exited succesfully';;
"$EX_DATAERR") echo 'Child has experienced a parsing error';;
*) echo 'Child has experienced an unknown error';;
esac
Что касается обработки ошибок, оболочка похожа на C, а не на C ++. Это не бросает. Каждая ошибка должна быть возвращена вызываемым (для процессов по их кодам выхода, поскольку нет глобального errno (использование файловой системы для этого было бы неуклюже), а вызывающий должен явно проверять наличие ошибок.
Однако вы можете сделать ] set -e
в вашей оболочке, чтобы ваша оболочка завершила работу с ошибкой, если любой из ее дочерних элементов, чей статус выхода не был проверен (например, в операторе if
), возвращает ненулевой выход status. Это похоже на выдачу неуловимого исключения.