Salah satu cara yang umum adalah:
die() {
IFS=' ' # make sure "$*" is joined with spaces
# output the arguments if any on stderr:
[ "$#" -eq 0 ] || printf '%s\n' "$*" 1>&2
exit 1
}
maka Anda menggunakannya seperti ini:
mkdir -p some/path || die "mkdir failed with status $?"
Atau jika Anda ingin menyertakan status keluar, Anda dapat mengubahnya ke:
die() {
last_exit_status=$?
IFS=' '
printf '%s\n' "FATAL ERROR: $* (status $last_exit_status)" 1>&2
exit 1
}
dan kemudian menggunakannya sedikit lebih mudah:
mkdir -p some/path || die "mkdir failed"
Ketika gagal, mkdir
kemungkinan akan sudah mengeluarkan pesan kesalahan, sehingga yang kedua mungkin dianggap berlebihan, dan Anda bisa melakukannya:
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
(atau gunakan varian pertama di die
atas tanpa argumen)
Kalau-kalau Anda belum melihat command1 || command2
sebelumnya, itu berjalan command1
, dan jika command1
gagal, itu berjalan command2
.
Jadi Anda bisa membacanya seperti "membuat direktori atau mati".
Contoh Anda akan terlihat seperti:
mkdir -p some/path || die "mkdir failed"
cd some/path || die "cd failed"
some_command || die "some_command failed"
Atau Anda dapat menyelaraskan dies
lebih jauh di sebelah kanan sehingga kode utama lebih jelas.
mkdir -p some/path || die "mkdir failed"
cd some/path || die "cd failed"
some_command || die "some_command failed"
Atau pada baris berikut saat baris perintah panjang:
mkdir -p some/path ||
die "mkdir failed"
cd some/path ||
die "cd failed"
some_command ||
die "some_command failed"
Juga, jika Anda akan menggunakan nama some/path
beberapa kali, simpan dalam variabel sehingga Anda tidak harus terus mengetiknya, dan dapat dengan mudah mengubahnya jika perlu. Dan ketika meneruskan argumen variabel ke perintah, pastikan untuk menggunakan --
pembatas opsi sehingga argumen tidak diambil sebagai opsi jika dimulai dengan -
.
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"