Lấy từ của bạn " mọi lệnh đều phụ thuộc vào mỗi lệnh trước đó. Nếu bất kỳ lệnh nào thất bại thì toàn bộ tập lệnh sẽ thất bại " theo nghĩa đen, tôi nghĩ bạn không cần bất kỳ chức năng đặc biệt nào để xử lý lỗi.
Tất cả những gì bạn cần là xâu chuỗi các lệnh của bạn với &&
toán tử và ||
toán tử, thực hiện chính xác những gì bạn đã viết.
Ví dụ: chuỗi này sẽ bị hỏng và sẽ in "đã xảy ra lỗi" nếu bất kỳ lệnh nào trước đó bị hỏng (bash đọc từ trái sang phải)
cd foo && rm a && cd bar && rm b || echo "something went wrong"
Ví dụ thực tế (tôi đã tạo dir foo, tệp a, thanh dir và tệp b chỉ cho một bản demo thực sự):
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
Và cuối cùng nếu tất cả các lệnh đã được thực thi thành công (mã thoát 0), tập lệnh sẽ tiếp tục:
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.
Điều quan trọng cần nhớ là với việc sử dụng && lệnh tiếp theo được thực thi nếu lệnh trước đó thoát với mã 0, điều đó có nghĩa là bash có nghĩa là thành công.
Nếu bất kỳ lệnh nào bị sai trong chuỗi thì lệnh / script / bất cứ điều gì sau | | sẽ được thực thi.
Và chỉ với bản ghi, Nếu bạn cần thực hiện các hành động khác nhau tùy thuộc vào lệnh bị hỏng, bạn cũng có thể thực hiện với tập lệnh cổ điển bằng cách theo dõi giá trị $?
báo cáo mã thoát của lệnh chính xác trước đó (trả về 0 nếu lệnh được thực thi thành công hoặc số dương khác nếu lệnh thất bại)
Thí dụ:
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
Đầu ra:
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
Mẹo: Bạn có thể chặn thông báo "bash: cd: bbar: Không có tệp nào như vậy ..." bằng cách áp dụng eval $comm 2>/dev/null