Так, відображати повідомлення про те, stderr
коли використовуються неправильні аргументи. І якщо це також спричиняє вихід програми, вийдіть із ненульовим статусом виходу.
Для діагностичних повідомлень слід використовувати стандартний потік помилок або для взаємодії з користувачем. До діагностичних повідомлень належать повідомлення про помилки, попередження та інші повідомлення, які не є частиною виводу утиліти, коли вона працює правильно ("правильно" означає, що нічого надзвичайного не відбувається, як-от файли не знайдені, або що б там не було).
У багатьох оболонках (все?) Відображається підказки, які типи користувачів та меню тощо надається, stderr
щоб перенаправлення stdout
не завадило вам значну взаємодію з оболонкою.
Далі йде повідомлення з блогу на цю тему:
Це цитата Дуга Макіллроя, винахідника труб Unix, що пояснює, як це stderr
сталося. 'v6' посилається на версію конкретної версії оригінальної операційної системи Unix, яка була випущена в 1975 році.
Усі програми розміщували діагностику на стандартному виході. Це завжди спричиняло проблеми, коли висновок перенаправляли на фільтр, але ставали нестерпними, коли вихід був спрямований на нічого не підозрілого процесу. Тим не менш, не бажаючи порушувати простоту моделі «стандарт-вхід-стандарт-вихід», люди допустили такий стан справ через v6. Незабаром після цього Денніс Річі вирізав Гордіїв вузол, ввівши стандартний помилку. Цього було недостатньо. За допомогою конвеєрної діагностики можна отримати будь-яку з декількох програм, що працюють одночасно. Діагностика необхідна для ідентифікації себе.
- Дуг МакІллрой, "Дослідницький читач UNIX: анотовані уривки з посібника програміста, 1971-1986"
"Ідентифікувати себе" означає просто сказати "Гей! Це я говорю! Це пішло не так: [...]":
$ ls nothere
ls: nothere: No such file or directory
Робити це на stderr
краще, так як в противному випадку можна було б читати все , що читав на stdout
(але ми не будемо робити це з ls
так чи інакше , чи не так?).