LINUX.ORG.RU

Почему справка ping выводится в stderr?

 , ,


0

2

Здравствуйте, Подскажите, пожалуйста, с чем может быть связано следующее: обнаружил, что справка некоторых команд, например ping -? выводится в stderr, а не stdout. А с чем это может быть связано? Это же вроде стандартный вывод команды, не ошибка.

Ответ на: комментарий от debugger

Потому что не все GNU Coding Standards осилили?

Кхм…

По теме: потому что по неведомой мне причине они отдельно опцию -h не обрабатывают и выводят справку аналогично случаю неверной опции. Документированной опции -? у него тоже нет, кстати, поэтому вывод справки при этом — лишь следствие написанного выше.

(Ну или у вас другая реализация ping. Тогда уточняйте.)

Rootlexx ★★★★★
()
Ответ на: комментарий от shell-script

Потому что -? это не справка. Это неверный аргумент.

Почему я не вижу хоть какого-нибудь сообщения об ошибке в ответ на неверный аргумент?

Сравни:

$ ping -C; echo $?
ping: invalid option -- 'C'

Usage
  ping [options] <destination>
...

и:

$ ping -?; echo $?

Usage
  ping [options] <destination>
...

В первом случае есть «invalid option – ‘C’», во втором — нет.

debugger ★★★★★
()
Ответ на: комментарий от debugger

Потому что не отправил багрепорт авторам пинга о неверном поведении.

shell-script ★★★★★
()

Это делается сепециально, потому что выхлоп команд часто парсится или куда нибудь отправляется через перенаправление вывода. Вот для того, чтобы справка не попадала туда, ее и пускают в stderr. для пользователя это одно и тоже.

AVL2 ★★★★★
()
Ответ на: комментарий от debugger

Почему я не вижу хоть какого-нибудь сообщения об ошибке в ответ на неверный аргумент?

Потому что:

	while ((ch = getopt(argc, argv, "h?" "4bRT:" "6F:N:" "aABc:dDfi:I:l:Lm:M:nOp:qQ:rs:S:t:UvVw:W:")) != EOF) {
                                          ^

Т.е. -? входит в число ожидаемых аргументов, просто не документирован.

Rootlexx ★★★★★
()
Ответ на: комментарий от debugger

Потому что не все GNU Coding Standards осилили? Они ещё и с кодом 2 выходят.

Если не ошибаюсь, то ping старше GNU Coding Standards лет на десять, так что ещё не ясно кто кому должен следовать… 😎

raspopov
()

всё что не является прямым результатом работы утилит выводится в stderr, к примеру это позволяет всем тулзам объединённым в пайплайн выводить инфу пользователю, справка спорный момент, но это скорее доп инфо

sparks ★★★★
()
Ответ на: комментарий от bugfixer

Да не проблема, просто писал скрипт, ошибся в паре десятков мест, потом оказалось что не ошибся …) Заинтересовало такое поведение, так как не задумывался ранее о том, куда попадает сообщение о справке. Спасибо всем кто ответил, интересно было узнать многие вещи!

ahnenerbe
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.