Ein üblicher Weg ist:
die() {
IFS=' ' # make sure "$*" is joined with spaces
# output the arguments if any on stderr:
[ "$#" -eq 0 ] || printf '%s\n' "$*" 1>&2
exit 1
}
dann benutzt du es so:
mkdir -p some/path || die "mkdir failed with status $?"
Wenn Sie möchten, dass der Exit-Status angezeigt wird, können Sie ihn in Folgendes ändern:
die() {
last_exit_status=$?
IFS=' '
printf '%s\n' "FATAL ERROR: $* (status $last_exit_status)" 1>&2
exit 1
}
und dann ist es ein bisschen einfacher:
mkdir -p some/path || die "mkdir failed"
Wenn dies fehlschlägt, wurde mkdir
wahrscheinlich bereits eine Fehlermeldung ausgegeben, sodass die zweite möglicherweise als redundant angesehen wird, und Sie können einfach Folgendes tun:
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
(oder verwenden Sie die erste Variante von die
oben ohne Argument)
Nur für den Fall, dass Sie es noch nicht gesehen command1 || command2
haben, wird es ausgeführt command1
, und wenn es command1
fehlschlägt, wird es ausgeführt command2
.
Sie können es also wie "Make the Directory or Die" lesen.
Ihr Beispiel würde folgendermaßen aussehen:
mkdir -p some/path || die "mkdir failed"
cd some/path || die "cd failed"
some_command || die "some_command failed"
Oder Sie können die dies
weiter rechts ausrichten , damit der Hauptcode offensichtlicher wird.
mkdir -p some/path || die "mkdir failed"
cd some/path || die "cd failed"
some_command || die "some_command failed"
Oder in der folgenden Zeile, wenn die Befehlszeilen lang sind:
mkdir -p some/path ||
die "mkdir failed"
cd some/path ||
die "cd failed"
some_command ||
die "some_command failed"
Wenn Sie den Namen some/path
mehrmals verwenden möchten, speichern Sie ihn in einer Variablen, damit Sie ihn nicht weiter eingeben müssen, und können ihn bei Bedarf problemlos ändern. Wenn Sie variable Argumente an Befehle übergeben, stellen Sie sicher, dass Sie das --
Optionsbegrenzer verwenden, damit das Argument nicht als Option verwendet wird, wenn es mit beginnt -
.
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"