Вы можете поддерживать две глобальные переменные (возможно, haswarnings
, haserrors
).
Каждый раз, когда функция возвращает, вы обновляете соответствующее значение.
В конце скрипта,проверьте значения и верните соответственно:
#!/bin/sh
haserrors=0
haswarnings=0
update_global_return(){
# must call immediately after function of interest
# otherwise "$?" will no longer have correct value
returncode="$?"
case "$returncode" in
127) haswarnings=1 ;;
1) haserrors=1 ;;
esac
# reset "$?"
return "$returncode"
}
do_global_return(){
# could use exit instead of return here
case "$haserrors,$haswarnings" in
1,*) return 1 ;;
0,1) return 127 ;;
*) return 0 ;;
esac
}
# ...
critical_function_1
update_global_return
# ...
lessimp_check_function_2
update_global_return
# ...
do_global_return