Có một lệnh tiêu chuẩn luôn luôn tồn tại với một thất bại?


42

Tôi muốn kiểm tra kịch bản của mình bằng một lệnh thất bại. Tôi có thể sử dụng một lệnh hiện có với các đối số xấu. Tôi cũng có thể viết một kịch bản đơn giản ngay lập tức thoát ra với một thất bại. Cả hai đều dễ làm và phù hợp với tôi, nhưng nếu có một lệnh tiêu chuẩn cho mục đích này, tôi muốn sử dụng nó để thay thế.


false, nhưng cũng có bất kỳ lệnh không tồn tại.
Kusalananda

Câu trả lời:


51

Bạn có thể sử dụng false( /bin/false, /usr/bin/falsehoặc vỏ dựng sẵn):

$ false || echo It failed.
It failed.
$

Bạn cũng có thể sử dụng exit 1từ một subshell:

$ (exit 1) || echo Gosh, it failed too.
Gosh, it failed too.
$

Ngoài ra, bạn có thể gọi thoát một cách hợp lý với bất kỳ số nào trong phạm vi 1-255, bao gồm. (Hầu hết các shell sẽ áp dụng thao tác modulo 255 cho bất kỳ số nào khác được đưa ra để thoát, vì vậy trong thực tế, bạn có thể thoát khỏi các số khác mặc dù chúng chỉ bị ép trong phạm vi nói trên. Nhưng một số shell sẽ làm những việc khác, ví dụ như thoát với một lỗi cú pháp (vẫn là trạng thái lỗi) nếu được gọi với giá trị âm. Các hệ thống giống Unix chỉ hỗ trợ mã thoát trong phạm vi 0-255, đó là lý do tại sao bạn không thể dựa vào hành vi được xác định rõ cho các giá trị khác được cung cấp để thoát trong tất cả các vỏ.)
mtraceur

1
Và như một chút chuyện nhỏ, trừ khi bạn cần tính di động đối với các shell thực sự cũ / tối nghĩa, bạn cũng có thể thực hiện ! :(hoặc bất kỳ lệnh nào khác thường trả về thành công). !nói để phủ nhận trạng thái thoát của lệnh theo sau. :chỉ là lệnh noop dựng sẵn luôn luôn thành công. (Chỉ cần đảm bảo để lại một khoảng trắng sau !và trước khi lệnh bị phủ định, nếu không, nó sẽ cố phân tích nó thành một lệnh bắt đầu bằng một !ký tự - hoặc trong trường hợp các shell như bashtrong chế độ tương tác, nó sẽ phân tích nó thành một trong những những sửa đổi lịch sử đặc biệt.)
mtraceur
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.