Да, отображать сообщение, stderr
когда используются неправильные аргументы. И если это также приводит к закрытию приложения, выйдите с ненулевым статусом выхода.
Вы должны использовать стандартный поток ошибок для диагностических сообщений или для взаимодействия с пользователем. Диагностические сообщения включают сообщения об ошибках, предупреждения и другие сообщения, которые не являются частью вывода утилиты, когда она работает правильно («правильно», что означает, что ничего исключительного не происходит, например, файлы не найдены или что-то еще может быть).
Многие оболочки (все?) Отображают подсказки, какие пользовательские типы, меню и т. Д., stderr
Чтобы перенаправление stdout
не помешало вам осмысленно взаимодействовать с оболочкой.
Следующее из сообщения в блоге на эту тему:
Это цитата Дуга Макиллроя, изобретателя труб Unix, объясняющая, как это stderr
произошло. «v6» относится к версии конкретной версии исходной операционной системы Unix, выпущенной в 1975 году.
Все программы ставят диагностику на стандартный вывод. Это всегда вызывало проблемы, когда вывод перенаправлялся в файл, но становилось невыносимым, когда вывод отправлялся в ничего не подозревающий процесс. Тем не менее, не желая нарушать простоту модели стандартного ввода-вывода, люди терпели такое положение дел до v6. Вскоре после этого Деннис Ритчи разорвал гордиев узел, введя стандартный файл ошибок. Этого было недостаточно. С помощью конвейеров диагностика может исходить из любой из нескольких программ, работающих одновременно. Диагностика нужна для идентификации себя.
- Даг Макиллрой, «Исследовательский читатель UNIX: аннотированные выдержки из руководства программиста, 1971-1986 годы»
«Идентифицировать себя» означает просто сказать «Эй! Это я говорю! Это пошло не так: [...]»:
$ ls nothere
ls: nothere: No such file or directory
Делать это stderr
предпочтительно, так как это могло бы быть прочитано тем, кто читал stdout
(но мы так ls
или иначе не делаем этого , не так ли?).