Nếu bạn sẽ gọi tập lệnh với source
, bạn có thể sử dụng return <x>
ở đâu<x>
sẽ là tình trạng kịch bản exit (sử dụng một khác không xứng với lỗi hoặc sai). Nhưng nếu bạn gọi một tập lệnh thực thi (nghĩa là trực tiếp với tên tệp của nó), câu lệnh return sẽ dẫn đến một khiếu nại (thông báo lỗi "return: chỉ có thể 'return' từ một hàm hoặc tập lệnh có nguồn gốc").
Nếu exit <x>
được sử dụng thay thế, khi tập lệnh được gọi với source
, nó sẽ dẫn đến việc thoát khỏi trình bao khởi động tập lệnh, nhưng tập lệnh thực thi sẽ chỉ chấm dứt, như mong đợi.
Để xử lý một trong hai trường hợp trong cùng một tập lệnh, bạn có thể sử dụng
return <x> 2> /dev/null || exit <x>
Điều này sẽ xử lý bất kỳ lời mời nào có thể phù hợp. Đó là giả sử bạn sẽ sử dụng tuyên bố này ở cấp cao nhất của tập lệnh. Tôi sẽ khuyên không nên trực tiếp thoát khỏi tập lệnh từ trong một hàm.
Lưu ý: <x>
được cho là chỉ là một con số.
1
một cách nhất quán. Nếu tập lệnh được chạy bởi một tập lệnh khác, bạn có thể muốn xác định bộ mã trạng thái của riêng bạn với ý nghĩa cụ thể. Ví dụ:1
== kiểm tra thất bại,2
== biên dịch thất bại. Nếu tập lệnh là một phần của cái gì đó khác, bạn có thể cần điều chỉnh mã để phù hợp với thực tiễn được sử dụng ở đó. Ví dụ: khi một phần của bộ kiểm thử chạy tự động, mã77
được sử dụng để đánh dấu một bài kiểm tra bị bỏ qua.