Enquanto escrevia esta pergunta, percebi que uma possível solução seria:
mkdir abc || { echo error >&2; exit 1; }
... # do stuff (which might alter $?)
cd abc || { echo error >&2; exit 1; }
... # do more stuff
do_something_else || { echo error >&2; exit 1; }
... # do even more
last_thing || { echo error >&2; exit 1; }
... # do final stuff
Nesse caso, nenhuma variável $status
é necessária e os comandos serão executados somente se os anteriores forem bem-sucedidos. E, eu também percebo, é aqui que uma função die "error message"
seria útil para ecoar a mensagem de erro e sair com o código de erro.
Atualizar
Com die
, seria:
die() { echo "$*" >&2; exit 1; }
mkdir abc || die "error"
... # do stuff
cd abc || die "error"
... # do more stuff
do_something_else || die "error"
... # do even more
last_thing || die "error"
... # do final stuff