Có, hiển thị thông báo stderr
khi sử dụng các đối số sai. Và nếu điều đó cũng khiến ứng dụng thoát ra, hãy thoát với trạng thái thoát khác không.
Bạn nên sử dụng luồng lỗi tiêu chuẩn cho các thông báo chẩn đoán hoặc cho tương tác người dùng. Thông báo chẩn đoán bao gồm thông báo lỗi, cảnh báo và các thông báo khác không phải là một phần của đầu ra của tiện ích khi nó hoạt động chính xác ("chính xác" có nghĩa là không có gì đặc biệt xảy ra, như không tìm thấy tệp hoặc bất cứ điều gì có thể).
Nhiều shell (tất cả?) Hiển thị lời nhắc, kiểu người dùng và menu, v.v. stderr
để việc chuyển hướng stdout
sẽ không ngăn bạn tương tác với shell theo cách có ý nghĩa.
Sau đây là từ một bài viết trên blog về chủ đề này:
Đây là một trích dẫn từ Doug McIllroy, người phát minh ra các ống Unix, giải thích làm thế nào stderr
để trở thành. 'v6' đang đề cập đến một phiên bản của phiên bản cụ thể của hệ điều hành Unix gốc được phát hành vào năm 1975.
Tất cả các chương trình đặt chẩn đoán trên đầu ra tiêu chuẩn. Điều này luôn gây ra sự cố khi đầu ra được chuyển hướng thành một, nhưng trở nên không thể chịu đựng được khi đầu ra được gửi đến một quy trình không nghi ngờ. Tuy nhiên, không sẵn lòng vi phạm tính đơn giản của mô hình đầu ra tiêu chuẩn-đầu vào-tiêu chuẩn, mọi người chấp nhận tình trạng này thông qua v6. Ngay sau đó Dennis Ritchie đã cắt nút Gordian bằng cách đưa ra lỗi tiêu chuẩn. Điều đó là không đủ. Với chẩn đoán đường ống có thể đến từ bất kỳ chương trình nào đang chạy đồng thời. Chẩn đoán cần thiết để xác định chính mình.
- Doug McIllroy, "Trình đọc UNIX nghiên cứu: Các đoạn trích được chú thích từ Sổ tay lập trình viên, 1971-1986"
Để "nhận diện chính mình" có nghĩa là chỉ cần nói "Này! Tôi đang nói! Điều này đã sai: [...]":
$ ls nothere
ls: nothere: No such file or directory
Làm điều này trên stderr
là tốt hơn, vì nó có thể được đọc bởi bất cứ điều gì đang đọc stdout
(nhưng chúng ta không làm điều đó với ls
dù sao , phải không?).