2016-01-22 21 views
6

Có lẽ một câu hỏi đơn giản nhưng một giải pháp thanh lịch không đến với tâm trí. Tôi muốn chạy một loạt các lệnh (mỗi một lệnh là một thử nghiệm) và trả về 1 nếu bất kỳ lệnh nào trong số chúng trả về không khác. Thông thường tôi sẽ làm điều gì đó như:Bash thất bại nếu bất kỳ lệnh nào thất bại nhưng vẫn chạy tất cả các lệnh

thingA && thingB && thingC 
exit $? 

Tuy nhiên, điều đó sẽ không chạy thingC nếu thingB không thành công và tôi muốn đảm bảo tất cả 3 đều chạy. Tôi có thể dễ dàng nghĩ ra cách tiếp cận không phù hợp:

final_result=0 
retval=thingA 
if [[ $retval != 0 ]] then 
    final_result=1 
fi 
retval=thingB 
... 
exit $final_result 

Có cách nào đơn giản, thanh lịch để có được những gì tôi muốn không?

Trả lời

10

Điều này có đủ thanh lịch không?

status=0 
thingA || status=1 
thingB || status=1 
thingC || status=1 
exit $status 

Bạn có thể sử dụng $? thay vì 1 nếu bạn muốn. Hoặc bạn có thể xác định lệnh cuối cùng không thành công bằng cách sử dụng trạng thái 1, 2, 3 khi bạn thực hiện nhiệm vụ. Nếu bạn muốn biết lệnh đầu tiên thất bại, bạn phải kiểm tra $status trước khi gán cho nó.

+0

Điều đó sẽ hiệu quả, cảm ơn bạn. – Pace

Các vấn đề liên quan