Un modo comune è:
die() {
IFS=' ' # make sure "$*" is joined with spaces
# output the arguments if any on stderr:
[ "$#" -eq 0 ] || printf '%s\n' "$*" 1>&2
exit 1
}
quindi lo usi in questo modo:
mkdir -p some/path || die "mkdir failed with status $?"
Oppure, se si desidera che includa lo stato di uscita, è possibile modificarlo in:
die() {
last_exit_status=$?
IFS=' '
printf '%s\n' "FATAL ERROR: $* (status $last_exit_status)" 1>&2
exit 1
}
e poi usarlo è un po 'più semplice:
mkdir -p some/path || die "mkdir failed"
Quando fallisce, mkdir
probabilmente avrà già emesso un messaggio di errore, in modo che il secondo possa essere visto come ridondante e potresti semplicemente fare:
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
(o usa la prima variante di cui die
sopra senza argomento)
Nel caso in cui non l'avessi mai visto command1 || command2
prima, funziona command1
e, se command1
fallisce, funzionacommand2
.
Quindi puoi leggerlo come "make the directory or die".
Il tuo esempio sarebbe simile a:
mkdir -p some/path || die "mkdir failed"
cd some/path || die "cd failed"
some_command || die "some_command failed"
Oppure puoi allineare l' dies
ulteriore a destra in modo che il codice principale sia più evidente.
mkdir -p some/path || die "mkdir failed"
cd some/path || die "cd failed"
some_command || die "some_command failed"
O sulla riga seguente quando le righe di comando sono lunghe:
mkdir -p some/path ||
die "mkdir failed"
cd some/path ||
die "cd failed"
some_command ||
die "some_command failed"
Inoltre, se hai intenzione di utilizzare il nome some/path
più volte, memorizzalo in una variabile in modo da non dover continuare a digitarlo e, se necessario, puoi cambiarlo facilmente. E quando si passano argomenti variabili ai comandi, assicurarsi di utilizzare il --
delimitatore di opzioni in modo che l'argomento non venga preso come opzione se inizia con -
.
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"