Diambil kata Anda " setiap perintah tergantung pada setiap perintah sebelumnya. Jika ada perintah gagal seluruh skrip harus gagal " secara harfiah, saya pikir Anda tidak memerlukan fungsi khusus untuk menangani kesalahan.
Yang Anda butuhkan adalah untuk menghubungkan perintah Anda dengan &&
operator dan ||
operator, yang melakukan apa yang Anda tulis.
Misalnya rantai ini akan rusak dan akan mencetak "ada yang salah" jika ada perintah sebelumnya yang rusak (bash dibaca dari kiri ke kanan)
cd foo && rm a && cd bar && rm b || echo "something went wrong"
Contoh nyata (saya membuat dir foo, file a, bar dir dan file b hanya untuk demo nyata):
gv@debian:/home/gv/Desktop/PythonTests$ cd foo && rm a && cd bar && rm bb || echo "something is wrong"
rm: cannot remove 'bb': No such file or directory
something is wrong #mind the error in the last command
gv@debian:/home/gv/Desktop/PythonTests$ cd foo && rm aa && cd bar && rm b || echo "something is wrong"
rm: cannot remove 'aa': No such file or directory
something is wrong #mind the error in second command in the row
Dan akhirnya jika semua perintah telah berhasil dijalankan (kode keluar 0), skrip terus berjalan:
gv@debian:/home/gv/Desktop/PythonTests$ cd foo && rm a && cd bar && rm b || echo "something is wrong"
gv@debian:/home/gv/Desktop/PythonTests/foo/bar$
# mind that the error message is not printed since all commands were successful.
Yang penting untuk diingat adalah bahwa dengan menggunakan perintah && selanjutnya dieksekusi jika perintah sebelumnya keluar dengan kode 0 yang untuk bash berarti sukses.
Jika ada perintah yang salah dalam rantai maka perintah / skrip / apa pun yang berikut || akan dieksekusi.
Dan hanya untuk catatan, Jika Anda perlu melakukan tindakan yang berbeda tergantung pada perintah yang rusak, Anda juga bisa melakukannya dengan skrip klasik dengan memantau nilai $?
yang melaporkan kode keluar dari perintah sebelumnya persis (mengembalikan nol jika perintah dieksekusi berhasil atau angka positif lainnya jika perintah gagal)
Contoh:
for comm in {"cd foo","rm a","cd bbar","rm b"};do #mind the error in third command
eval $comm
if [[ $? -ne 0 ]];then
echo "something is wrong in command $comm"
break
else
echo "command $comm executed succesful"
fi
done
Keluaran:
command cd foo executed succesfull
command rm a executed succesfull
bash: cd: bbar: No such file or directory
something is wrong in command cd bbar
Kiat: Anda dapat menekan pesan "bash: cd: bbar: Tidak ada file seperti itu ..." dengan menerapkan eval $comm 2>/dev/null