2012-12-10 24 views

Trả lời

17

Dưới đây là một số biểu mẫu phổ biến. Lựa chọn nào tốt nhất tùy thuộc vào việc bạn làm. Bạn có thể sử dụng bất kỳ tập hợp con hoặc kết hợp nào của chúng trong một tập lệnh duy nhất mà không có phong cách xấu.


if ! failingcommand 
then 
    echo >&2 message 
    exit 1 
fi 

failingcommand 
ret=$? 
if ! test "$ret" -eq 0 
then 
    echo >&2 "command failed with exit status $ret" 
    exit 1 
fi 

failingcommand || exit "$?" 

failingcommand || { echo >&2 "failed with $?"; exit 1; } 
+0

Bạn có thể cân nhắc việc thêm> & 2 vào lệnh echo để gửi nó tới stderr thay vì stdout. Nếu không thì câu trả lời hoàn hảo. +1 – Nemo

+0

Khi gọi 'thoát',' thoát' không có args giống với 'exit $?'. – jordanm

+0

@jordanm - Ngoại trừ trong các ví dụ này, $? sẽ được sửa đổi bởi lệnh gọi thành 'echo'. Vì vậy, một 'lối ra' đơn giản sẽ thoát với trạng thái không. – Nemo

5

Bạn có thể làm một cái gì đó như:

git clone [email protected]:my-username/my-repo.git || exit 1 

Hoặc exec nó:

exec git clone [email protected]:my-username/my-repo.git 

Sau này sẽ cho phép quá trình shell được thực hiện trên của các hoạt động clone, và nếu nó không thành công, trở lại một lỗi. Bạn có thể tìm hiểu thêm về exec here.

+0

Hầu như làm việc, nhưng làm thế nào tôi có thể thêm một "Error message here" echo sau đó chạy 'thoát 1'? Tôi đã thử: '|| echo "ERROR message here" && exit 1' nhưng nó luôn thoát, ngay cả khi thành công. Cảm ơn. – Justin

+0

Bạn cần 'failingcommand || {echo message && exit 1; } 'bởi vì' && 'không ràng buộc mạnh hơn' || '. Và sau đó bạn sử dụng tốt hơn 'failingcommand || {echo message; thoát 1; } ' –

0

Phương pháp 1:

git clone [email protected]:my-username/my-repo.git || exit 1 

Cách 2:

if ! (git clone [email protected]:my-username/my-repo.git) then 
    exit 1 
    # Put Failure actions here... 
else 
    echo "Success" 
    # Put Success actions here... 
fi 
Các vấn đề liên quan