ใช้คำพูดของคุณ " ทุกคำสั่งขึ้นอยู่กับทุกคำสั่งก่อนหน้าหากคำสั่งใด ๆ ล้มเหลวสคริปต์ทั้งหมดควรล้มเหลว " อย่างแท้จริงฉันคิดว่าคุณไม่จำเป็นต้องมีฟังก์ชั่นพิเศษใด ๆ เพื่อจัดการกับข้อผิดพลาด
สิ่งที่คุณต้องใช้คือเชื่อมโยงคำสั่งของคุณกับ&&
โอเปอเรเตอร์และ||
โอเปอเรเตอร์ซึ่งทำสิ่งที่คุณเขียน
ยกตัวอย่างเช่นห่วงโซ่นี้จะยากจนและจะพิมพ์ "สิ่งที่ผิดพลาด" ถ้าใด ๆของคำสั่งก่อนหน้านี้ยากจน (ทุบตีอ่านจากซ้ายไปขวา)
cd foo && rm a && cd bar && rm b || echo "something went wrong"
ตัวอย่างจริง (ฉันสร้าง dir foo, ไฟล์ a, บาร์ dir และไฟล์ b สำหรับการสาธิตจริง):
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
และในที่สุดหากคำสั่งทั้งหมดได้รับการดำเนินการเรียบร้อยแล้ว (รหัสทางออก 0) สคริปต์จะดำเนินการต่อไป:
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.
สิ่งสำคัญที่ต้องจำคือเมื่อใช้คำสั่ง && ถัดไปจะถูกดำเนินการหากคำสั่งก่อนหน้าออกจากด้วยรหัส 0 ซึ่งสำหรับ bash หมายถึงความสำเร็จ
หากคำสั่งใด ๆ ผิดพลาดในห่วงโซ่แล้วคำสั่ง / สคริปต์ / สิ่งต่อไปนี้ || จะถูกประหารชีวิต
และสำหรับเร็กคอร์ดหากคุณต้องการดำเนินการต่าง ๆ ขึ้นอยู่กับคำสั่งที่แตกคุณสามารถทำได้ด้วยสคริปต์คลาสสิกโดยการตรวจสอบค่า$?
ที่รายงานรหัสออกจากคำสั่งก่อนหน้านี้อย่างแน่นอน (ส่งกลับศูนย์ถ้าคำสั่งดำเนินการสำเร็จ หรือจำนวนบวกอื่น ๆ หากคำสั่งล้มเหลว)
ตัวอย่าง:
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
เอาท์พุท:
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
เคล็ดลับ: คุณสามารถระงับข้อความ "bash: cd: bbar: ไม่มีไฟล์ดังกล่าว ... " โดยใช้ eval $comm 2>/dev/null