Я собираюсь предложить альтернативный подход, я признаю, что не отвечает напрямую.
Я предлагаю этот подход, потому что он может быть сложным для передачи команды и аргументов и агрегированных групп команд и аргументов другомувыполняемая и проверяемая функция.
Вместо этого проще выполнить команды и затем запустить функцию проверки, например,
check_error()
{
lasterr=$?
msg="$*"
if [ "${lasterr}X" != "0X" ];
then
echo "command failed, errcode ${lasterr}, $msg"
exit 1
fi
}
...
which git || apt install git
check_error "git failed"
... обратите внимание, что функция check_error
должнабыть следующим оператором немедленно после команд, которые вы хотите проверить.