Вывод справки в stderr
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 13.12.25 13:19
Оценка:
Почему изрядная часть unix-like утилит выводит справку в stderr?

На это есть какие-то разумные соглашения, или просто мода такая тупая?
Re: Вывод справки в stderr
От: Pzz Россия https://github.com/alexpevzner
Дата: 13.12.25 13:22
Оценка: -1
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>На это есть какие-то разумные соглашения, или просто мода такая тупая?


Мне кажется, они просто предусмотрели один "аварийный" вывод, и выводят туда и справку и сообщения об ошибках. В общем, от небольшого ума.
Re: Вывод справки в stderr
От: aik Австралия  
Дата: 13.12.25 13:24
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Почему изрядная часть unix-like утилит выводит справку в stderr?

ЕМ>На это есть какие-то разумные соглашения, или просто мода такая тупая?

эта изрядная часть, поди, на любые ошибки в командной строке выдаёт справку (а не по -h/--help), тогда ей в stderr самое место.
Re[2]: Вывод справки в stderr
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 13.12.25 14:13
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Мне кажется, они просто предусмотрели один "аварийный" вывод, и выводят туда и справку и сообщения об ошибках.


Смотрел несколько исходников — там используется и printf, и fprintf с stdout/stderr. В stdout выводят листинги и прочее. Но справку — почему-то явно в stderr.
Re[2]: Вывод справки в stderr
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 13.12.25 14:13
Оценка:
Здравствуйте, aik, Вы писали:

aik>эта изрядная часть, поди, на любые ошибки в командной строке выдаёт справку (а не по -h/--help)


Не, ошибки почти все выдают отдельно. Тоже в stderr.
Re: Вывод справки в stderr
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 13.12.25 14:38
Оценка: +2 :)
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Почему изрядная часть unix-like утилит выводит справку в stderr?


ЕМ>На это есть какие-то разумные соглашения, или просто мода такая тупая?


Почему тупая? По мне так — вполне логично. В stdout выдаются результаты работы программы, а всякие служебные сообщения, об ошибках там, или та же справка — в stderr
Маньяк Робокряк колесит по городу
Re[3]: Вывод справки в stderr
От: Pzz Россия https://github.com/alexpevzner
Дата: 13.12.25 14:48
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

Pzz>>Мне кажется, они просто предусмотрели один "аварийный" вывод, и выводят туда и справку и сообщения об ошибках.


ЕМ>Смотрел несколько исходников — там используется и printf, и fprintf с stdout/stderr. В stdout выводят листинги и прочее. Но справку — почему-то явно в stderr.


А кто, например, из более-менее не-экзотических?
Re: Вывод справки в stderr
От: kov_serg Россия  
Дата: 13.12.25 15:37
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Почему изрядная часть unix-like утилит выводит справку в stderr?

ЕМ>На это есть какие-то разумные соглашения, или просто мода такая тупая?
Разве это кому-то мешает? Всегда можно перенаправить вывод "&2>1" если надо.
Re[2]: Вывод справки в stderr
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 13.12.25 16:02
Оценка:
Здравствуйте, Marty, Вы писали:

M>В stdout выдаются результаты работы программы, а всякие служебные сообщения, об ошибках там, или та же справка — в stderr


И почему же справка, по-Вашему, ближе к "ошибкам", чем к "результатам работы"?
Re[3]: Вывод справки в stderr
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 13.12.25 16:04
Оценка: :)
Здравствуйте, Евгений Музыченко, Вы писали:

M>>В stdout выдаются результаты работы программы, а всякие служебные сообщения, об ошибках там, или та же справка — в stderr


ЕМ>И почему же справка, по-Вашему, ближе к "ошибкам", чем к "результатам работы"?


Такая же технологическая информация
Маньяк Робокряк колесит по городу
Re[4]: Вывод справки в stderr
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 13.12.25 17:02
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>А кто, например, из более-менее не-экзотических?


Я все уже не вспомню. Сегодня вот попалась ftdiflash (чтение/запись EEPROM через FTDI), неделю назад — reveng (подбор алгоритмов/полиномов CRC). avrdude (программатор MCU AVR) тоже так делает.

А вообще попадалось немало — иногда в поисках нужной утилиты приходится и десяток в день тестировать.
Re[2]: Вывод справки в stderr
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 13.12.25 17:05
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Разве это кому-то мешает?


Тем, кто хочет просто пролистать справку, а не заморачиваться с перенаправлением?

_>Всегда можно перенаправить вывод "&2>1" если надо.


А еще можно не выводить справку в stderr, если не надо.

Вопрос же не в том, можно ли с этим бороться, а в том, какая логика лежит в основе такого подхода. Я бегло погуглил, но внятных доводов "за" не нашел, а вот брани разной степени жесткости нашел изрядно.
Re[4]: Вывод справки в stderr
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 13.12.25 17:06
Оценка:
Здравствуйте, Marty, Вы писали:

ЕМ>>И почему же справка, по-Вашему, ближе к "ошибкам", чем к "результатам работы"?


M>Такая же технологическая информация


Такая же, как что? Что Вы называете "технологической информацией"?
Re[3]: Вывод справки в stderr
От: kov_serg Россия  
Дата: 13.12.25 18:08
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Вопрос же не в том, можно ли с этим бороться, а в том, какая логика лежит в основе такого подхода. Я бегло погуглил, но внятных доводов "за" не нашел, а вот брани разной степени жесткости нашел изрядно.

Логика очень простая. В stderr предназначен для вывода диагностических и отладочных сообщений. Вот когда указываете неверный ключ вам вываливают сообщение об ошибке и за одно справку.
А stdout для вывода данных. Поэтому такое поведение вполне логично. Хотя жестких стандартов нет. Все лепят в зависимости от того куда тюбитейка ляжет.
Re[5]: Вывод справки в stderr
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 13.12.25 18:31
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>>>И почему же справка, по-Вашему, ближе к "ошибкам", чем к "результатам работы"?


M>>Такая же технологическая информация


ЕМ>Такая же, как что? Что Вы называете "технологической информацией"?


Такая же технологическая информация, как и сообщения об ошибках. В отличие от нормального вывода результатов работы программы
Маньяк Робокряк колесит по городу
Re[5]: Вывод справки в stderr
От: Pzz Россия https://github.com/alexpevzner
Дата: 13.12.25 19:27
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Я все уже не вспомню. Сегодня вот попалась ftdiflash (чтение/запись EEPROM через FTDI), неделю назад — reveng (подбор алгоритмов/полиномов CRC). avrdude (программатор MCU AVR) тоже так делает.


Из всего этого для линуха только avrdude попадается.

Хм. Попробовал. И впрямь. Даже и не знаю, что сказать. Всё же, большинство программ help в stdout печатают...
Re: Вывод справки в stderr
От: novitk США  
Дата: 13.12.25 19:46
Оценка: +2
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Почему изрядная часть unix-like утилит выводит справку в stderr?

Оно еще и не 0 в exit code. Если утилита участвует в pipe ты точно хочешь мусор на входе следующего этапа конвейера?
Re[4]: Вывод справки в stderr
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 13.12.25 20:38
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>когда указываете неверный ключ вам вываливают сообщение об ошибке и за одно справку.


Это тоже криво. Таки терминал предполагает, что за ним сидит не такой дилетант, как за гуем, поэтому вываливать ему полную справку на каждую ошибку — явное и грубое неуважение. Особенно, когда справка объемная, и после ее вывода сообщения об ошибке уже нет.

_>А stdout для вывода данных.


Чем справка не "данные"?
Re[6]: Вывод справки в stderr
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 13.12.25 20:41
Оценка: +1
Здравствуйте, Marty, Вы писали:

ЕМ>>Такая же, как что? Что Вы называете "технологической информацией"?


M>Такая же технологическая информация, как и сообщения об ошибках. В отличие от нормального вывода результатов работы программы


Какие признаки отличают текст справки от "результатов работы программы"? Поведение типичной программы определяется ключами командной строки. Если я задаю ключ -h, то ожидаемым и желательным результатом является текст справки. Если задаю другие ключи, ожидаемые и желательные результаты работы будут другими. А сообщения об ошибках являются или не ожидаемыми, или не желательными.
Re[7]: Вывод справки в stderr
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 13.12.25 20:43
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Какие признаки отличают текст справки от "результатов работы программы"? Поведение типичной программы определяется ключами командной строки. Если я задаю ключ -h, то ожидаемым и желательным результатом является текст справки. Если задаю другие ключи, ожидаемые и желательные результаты работы будут другими. А сообщения об ошибках являются или не ожидаемыми, или не желательными.


Ладно, расходимся каждый при своём мнении
Маньяк Робокряк колесит по городу
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.