Làm thế nào để hoàn tác hiệu ứng của bộ Set -e mà làm cho bash thoát ngay lập tức nếu có lệnh nào thất bại?


205

Sau khi nhập set -evào một bash shell tương tác, bash sẽ thoát ngay lập tức nếu bất kỳ lệnh nào thoát ra khác không. Làm thế nào tôi có thể hoàn tác hiệu ứng này?

Câu trả lời:


309

Với set +e. Vâng, lạc hậu là bạn kích hoạt tùy chọn shell set -vô hiệu hóa chúng với set +. Nho khô lịch sử, donchanow.


Cảm ơn bạn rất nhiều, đó là một trong những dòng cuối cùng của trang hướng dẫn tương ứng ( faqs.org/docs/bashman/bashref_56.html ) mà tôi đã không đọc đến cuối.
Tianyi Cui

Hướng dẫn bash là rất lớn, đó là sự thật. (FYI, kể từ khi bạn dường như mới: đó là điều thực hiện để nhấp vào dấu kiểm dưới câu trả lời tốt nhất cho câu hỏi của bạn, điều này được gọi là "chấp nhận" nó.)
Zwol

12
Đáng buồn thay, ngôn ngữ shell Unix (hầu hết không dành riêng cho 'bash') là một trong những ngôn ngữ lập trình ít nhất quán nội bộ nhất vẫn được sử dụng rộng rãi ngày nay. Bạn sẽ phải học nhiều hơn những mụn cóc nhỏ này. Và tôi muốn nói rằng đó là một lỗi tài liệu, ở đó.
zwol

10
nho lịch sử là nho khô địa ngục!
James

2
Cuối cùng, một bash Bash không công bằng: dấu gạch ngang đơn là tùy chọn dòng lệnh shell POSIX tiêu chuẩn, và do đó, tự nhiên nhất để "làm một cái gì đó". +giống như -nhưng vượt qua một cái gì đó có nghĩa là "không" như trong "".
Ciro Santilli 郝海东 冠状 病 事件

68

Nó có thể không được sử dụng set +e/ set -emỗi lần bạn muốn ghi đè lên nó. Tôi tìm thấy một giải pháp đơn giản hơn.

Thay vì làm như thế này:

set +e
command_that_might_fail_but_we_want_to_ignore_it
set -e

bạn có thể làm như thế này:

command_that_might_fail_but_we_want_to_ignore_it || true

hoặc, nếu bạn muốn lưu tổ hợp phím và đừng bận tâm đến một chút khó hiểu:

command_that_might_fail_but_we_want_to_ignore_it || :

Hi vọng điêu nay co ich!


11
Đã tự hỏi về lịch sử :và tìm thấy câu trả lời của tôi ở đây , trong trường hợp bất kỳ ai khác tò mò.
3cheesewheel

4
Điều này chỉ áp dụng nếu bạn không quan tâm đến mã trả về của lệnh bạn đang chạy.
Isaac

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.