Đảm bảo rằng một lệnh đã được thực thi trong bash


7

Tôi có một tệp bash với các lệnh để hợp nhất các tệp pcap. Tôi muốn biết liệu có cách nào để đảm bảo một dòng trong bash chạy hay không. Giống như trong tập tin bat windows, chúng tôi có% ErrorLevel% ¨ Nói lệnh

touch -r dcn_file "${dir_dcn}"/"${TAG1_dcn}".pcap 

Làm thế nào để tôi chắc chắn rằng điều này đã được chạy?


3
bạn có thể sử dụng echo $?giá trị trả về của lệnh cuối cùng được thực hiện
Kiwy

1
Bạn cũng có thể sử dụng set -eđể thực hiện thoát bash khi thất bại. Bạn cũng có thể gán mã bổ sung bằng cách sử dụng trapđể được thực thi trong trường hợp có lỗi (hoặc chỉ ở cuối bất kể lỗi)
Vi.

Câu trả lời:


12

Vỏ được chế tạo để làm điều đó một cách dễ dàng.

if touch -r dcn_file "${dir_dcn}"/"${TAG1_dcn}".pcap 
then
    echo "Command ran successfully."
else
    echo "Command had an error: $?"
fi

Thỉnh thoảng bạn sẽ tìm thấy một số lệnh độc quyền không thoát với trạng thái 0 thành công và khác không khi thất bại, nhưng may mắn thay, những sự bỏ qua đó gần như đã tuyệt chủng.


1
Ngoại trừ grepvà các biến thể của nó, trong đó 0 chỉ ra kết quả khớp được tìm thấy, 1 chỉ ra không tìm thấy kết quả khớp ("lỗi"?) Và mã cao hơn 2 chỉ ra lỗi.
WinnieNicklaus

9

Biến bash $?giữ trạng thái thoát của lệnh chạy cuối cùng. Đối với các chương trình điển hình, giá trị 0là thành công và bất kỳ giá trị nào khác là thất bại. Mã trả lại cụ thể phải được ghi lại trong các trang hướng dẫn của chương trình được đề cập.

Bạn có thể sử dụng mã như:

touch -r dcn_file "${dir_dcn}"/"${TAG1_dcn}".pcap
[ $? -ne 0 ]; then
   echo "Command failed: touch: $?"
   return $?
fi

Để kiểm tra mã trả về và sau đó in thông báo lỗi và có một đoạn mã thoát với cùng một mã lỗi.


Khi tôi đọc một số tài liệu về nicesáng nay, lệnh có thể trả về giá trị tính độc đáo của quy trình thay vì 0 trên phiên bản cũ
Kiwy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.