Thông điệp sử dụng nên đi đến thiết bị xuất chuẩn hoặc thiết bị xuất chuẩn?


29

Nếu thông điệp sử dụng được in

 command -?

của một lệnh Unix đi đến thiết bị xuất chuẩn hoặc thiết bị xuất chuẩn, và tại sao? Nó có nên đi đến cùng một vị trí nếu người dùng mắc lỗi với một tùy chọn không?


4
Lưu ý thêm: không sử dụng -? sử dụng --help và -h Bởi vì --help và -h là tiêu chuẩn và bởi vì -? sẽ có thể được giải thích bởi vỏ.
ctrl-alt-delor

1
@richard Đây là một điểm tuyệt vời. Thủ thuật thú vị (trong bash): touch -- -l; ls -?- bạn thực sự có được một danh sách dài như thể bạn đã chuyển qua -lls.
mattdm

@ giàu. Khi bạn không biết liệu lệnh có chấp nhận các tùy chọn dài kiểu GNU hay có thể hỗ trợ -htùy chọn cho mục đích khác ngoài thông báo trợ giúp hay không, sau đó '-?'(có dấu ngoặc kép) hoặc -:cho bạn cơ hội tốt để nhận thông báo lỗi (và cách sử dụng) :?không thể là lựa chọn hợp lệ cho bất cứ điều gì bằng cách sử dụng getopt(3).
Stéphane Chazelas 8/213

@Stephane Chazelas. Nếu tôi hiểu nhận xét của bạn một cách chính xác, bạn đang viết từ góc độ của người dùng chương trình, câu hỏi này tôi nghĩ là từ quan điểm của một người viết chương trình.
ctrl-alt-delor

Câu trả lời:


50

Nó sẽ đi đến thiết bị xuất chuẩn, vì vậy bạn có thể gõ:

command --help | less

Điều này cũng được khuyến nghị bởi Tiêu chuẩn mã hóa Gnu trên--help .

Mặt khác, thông báo sử dụng mà bạn nhận được khi bạn sử dụng tùy chọn không hợp lệ hoặc bỏ qua một đối số được yêu cầu sẽ chuyển đến stderr, vì đó là thông báo lỗi và bạn không muốn đưa nó vào lệnh tiếp theo trong đường ống.

Khi bạn sử dụng --help, thông báo sử dụng là đầu ra bình thường và dự kiến ​​của lệnh. Do đó, nó đi đến thiết bị xuất chuẩn, vì vậy nó có thể được dẫn đến một lệnh khác, như lesshoặc grep.

Khi bạn nói command --bogus-option | other-command, bạn không muốn thông báo sử dụng sẽ bị lỗi, bởi vì bây giờ nó là đầu ra bất ngờ không nên xử lý other-command. Ngoài ra, nếu đầu ra của --helpnhiều hơn một số dòng, thì thông báo lỗi sử dụng chỉ nên chứa một bản tóm tắt về --helpđầu ra và giới thiệu người dùng để --helpbiết thêm chi tiết.


1
Có một chút khó hiểu khi có hai luồng đầu ra khác nhau cho cùng một thông điệp tùy thuộc vào điều gì đó phải không?

7
Có lẽ, nhưng chúng không nhất thiết phải là cùng một thông điệp. Nếu đầu ra của --helpnhiều hơn một vài dòng, thì thông báo sử dụng được tạo bởi một tùy chọn không hợp lệ sẽ chỉ là một bản tóm tắt ngắn để sử dụng --helpđể xem thông tin đầy đủ.
cjm

4
+1 - điều này đúng 100% và tôi không thấy có bất kỳ chỗ nào cho sự bất đồng ở đây.
simon
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.