Uma maneira comum é:
die() {
IFS=' ' # make sure "$*" is joined with spaces
# output the arguments if any on stderr:
[ "$#" -eq 0 ] || printf '%s\n' "$*" 1>&2
exit 1
}
então você o usa assim:
mkdir -p some/path || die "mkdir failed with status $?"
Ou, se você quiser incluir o status de saída, poderá alterá-lo para:
die() {
last_exit_status=$?
IFS=' '
printf '%s\n' "FATAL ERROR: $* (status $last_exit_status)" 1>&2
exit 1
}
e depois usá-lo é um pouco mais fácil:
mkdir -p some/path || die "mkdir failed"
Quando falha, mkdir
provavelmente já emitiu uma mensagem de erro, para que a segunda seja vista como redundante, e você pode simplesmente:
mkdir -p some/path || exit # with the same (failing) exit status as mkdir's
mkdir -p some/path || exit 1 # with exit status 1 always
(ou use a primeira variante die
acima sem argumento)
Caso você não tenha visto command1 || command2
antes, ele será executado command1
e, se command1
falhar, será executado command2
.
Então você pode ler como "criar o diretório ou morrer".
Seu exemplo seria semelhante a:
mkdir -p some/path || die "mkdir failed"
cd some/path || die "cd failed"
some_command || die "some_command failed"
Ou você pode alinhar dies
mais à direita, para que o código principal seja mais óbvio.
mkdir -p some/path || die "mkdir failed"
cd some/path || die "cd failed"
some_command || die "some_command failed"
Ou na linha a seguir, quando as linhas de comando forem longas:
mkdir -p some/path ||
die "mkdir failed"
cd some/path ||
die "cd failed"
some_command ||
die "some_command failed"
Além disso, se você usar o nome some/path
várias vezes, armazene-o em uma variável para não precisar digitá-lo e alterá-lo facilmente, se necessário. E ao passar argumentos variáveis para comandos, certifique-se de usar o --
delimitador de opções para que o argumento não seja considerado uma opção se começar com -
.
dir=some/path
mkdir -p -- "$dir" || die "Cannot make $dir"
cd -P -- "$dir" || die "Cannot cd to $dir"
some_command || die "Cannot run some_command"