Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Почему изрядная часть unix-like утилит выводит справку в stderr? ЕМ>На это есть какие-то разумные соглашения, или просто мода такая тупая?
эта изрядная часть, поди, на любые ошибки в командной строке выдаёт справку (а не по -h/--help), тогда ей в stderr самое место.
Здравствуйте, Pzz, Вы писали:
Pzz>Мне кажется, они просто предусмотрели один "аварийный" вывод, и выводят туда и справку и сообщения об ошибках.
Смотрел несколько исходников — там используется и printf, и fprintf с stdout/stderr. В stdout выводят листинги и прочее. Но справку — почему-то явно в stderr.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Почему изрядная часть unix-like утилит выводит справку в stderr?
ЕМ>На это есть какие-то разумные соглашения, или просто мода такая тупая?
Почему тупая? По мне так — вполне логично. В stdout выдаются результаты работы программы, а всякие служебные сообщения, об ошибках там, или та же справка — в stderr
Здравствуйте, Евгений Музыченко, Вы писали:
Pzz>>Мне кажется, они просто предусмотрели один "аварийный" вывод, и выводят туда и справку и сообщения об ошибках.
ЕМ>Смотрел несколько исходников — там используется и printf, и fprintf с stdout/stderr. В stdout выводят листинги и прочее. Но справку — почему-то явно в stderr.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Почему изрядная часть unix-like утилит выводит справку в stderr? ЕМ>На это есть какие-то разумные соглашения, или просто мода такая тупая?
Разве это кому-то мешает? Всегда можно перенаправить вывод "&2>1" если надо.
Здравствуйте, Marty, Вы писали:
M>В stdout выдаются результаты работы программы, а всякие служебные сообщения, об ошибках там, или та же справка — в stderr
И почему же справка, по-Вашему, ближе к "ошибкам", чем к "результатам работы"?
Здравствуйте, Евгений Музыченко, Вы писали:
M>>В stdout выдаются результаты работы программы, а всякие служебные сообщения, об ошибках там, или та же справка — в stderr
ЕМ>И почему же справка, по-Вашему, ближе к "ошибкам", чем к "результатам работы"?
Здравствуйте, Pzz, Вы писали:
Pzz>А кто, например, из более-менее не-экзотических?
Я все уже не вспомню. Сегодня вот попалась ftdiflash (чтение/запись EEPROM через FTDI), неделю назад — reveng (подбор алгоритмов/полиномов CRC). avrdude (программатор MCU AVR) тоже так делает.
А вообще попадалось немало — иногда в поисках нужной утилиты приходится и десяток в день тестировать.
Здравствуйте, kov_serg, Вы писали:
_>Разве это кому-то мешает?
Тем, кто хочет просто пролистать справку, а не заморачиваться с перенаправлением?
_>Всегда можно перенаправить вывод "&2>1" если надо.
А еще можно не выводить справку в stderr, если не надо.
Вопрос же не в том, можно ли с этим бороться, а в том, какая логика лежит в основе такого подхода. Я бегло погуглил, но внятных доводов "за" не нашел, а вот брани разной степени жесткости нашел изрядно.
Здравствуйте, Marty, Вы писали:
ЕМ>>И почему же справка, по-Вашему, ближе к "ошибкам", чем к "результатам работы"?
M>Такая же технологическая информация
Такая же, как что? Что Вы называете "технологической информацией"?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Вопрос же не в том, можно ли с этим бороться, а в том, какая логика лежит в основе такого подхода. Я бегло погуглил, но внятных доводов "за" не нашел, а вот брани разной степени жесткости нашел изрядно.
Логика очень простая. В stderr предназначен для вывода диагностических и отладочных сообщений. Вот когда указываете неверный ключ вам вываливают сообщение об ошибке и за одно справку.
А stdout для вывода данных. Поэтому такое поведение вполне логично. Хотя жестких стандартов нет. Все лепят в зависимости от того куда тюбитейка ляжет.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>>>И почему же справка, по-Вашему, ближе к "ошибкам", чем к "результатам работы"?
M>>Такая же технологическая информация
ЕМ>Такая же, как что? Что Вы называете "технологической информацией"?
Такая же технологическая информация, как и сообщения об ошибках. В отличие от нормального вывода результатов работы программы
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Я все уже не вспомню. Сегодня вот попалась ftdiflash (чтение/запись EEPROM через FTDI), неделю назад — reveng (подбор алгоритмов/полиномов CRC). avrdude (программатор MCU AVR) тоже так делает.
Из всего этого для линуха только avrdude попадается.
Хм. Попробовал. И впрямь. Даже и не знаю, что сказать. Всё же, большинство программ help в stdout печатают...
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Почему изрядная часть unix-like утилит выводит справку в stderr?
Оно еще и не 0 в exit code. Если утилита участвует в pipe ты точно хочешь мусор на входе следующего этапа конвейера?
Здравствуйте, kov_serg, Вы писали:
_>когда указываете неверный ключ вам вываливают сообщение об ошибке и за одно справку.
Это тоже криво. Таки терминал предполагает, что за ним сидит не такой дилетант, как за гуем, поэтому вываливать ему полную справку на каждую ошибку — явное и грубое неуважение. Особенно, когда справка объемная, и после ее вывода сообщения об ошибке уже нет.
_>А stdout для вывода данных.
Здравствуйте, Marty, Вы писали:
ЕМ>>Такая же, как что? Что Вы называете "технологической информацией"?
M>Такая же технологическая информация, как и сообщения об ошибках. В отличие от нормального вывода результатов работы программы
Какие признаки отличают текст справки от "результатов работы программы"? Поведение типичной программы определяется ключами командной строки. Если я задаю ключ -h, то ожидаемым и желательным результатом является текст справки. Если задаю другие ключи, ожидаемые и желательные результаты работы будут другими. А сообщения об ошибках являются или не ожидаемыми, или не желательными.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Какие признаки отличают текст справки от "результатов работы программы"? Поведение типичной программы определяется ключами командной строки. Если я задаю ключ -h, то ожидаемым и желательным результатом является текст справки. Если задаю другие ключи, ожидаемые и желательные результаты работы будут другими. А сообщения об ошибках являются или не ожидаемыми, или не желательными.