Если сообщение об использовании, которое напечатано, например, с
command -?
команды Unix перейти на stderr или stdout, и почему? Должен ли он идти в то же место, если пользователь допустил ошибку с опцией?
Если сообщение об использовании, которое напечатано, например, с
command -?
команды Unix перейти на stderr или stdout, и почему? Должен ли он идти в то же место, если пользователь допустил ошибку с опцией?
touch -- -l; ls -?
- вы получите длинный список, как если бы вы перешли-l
на ls.-h
параметр, отличный от сообщения справки, тогда'-?'
(с кавычками) или-:
дайте вам хороший шанс получить сообщение об ошибке (и использовании), поскольку:
и?
не может быть допустимыми параметрами для чего-либо, использующегоgetopt(3)
.Ответы:
Он должен перейти на стандартный вывод, поэтому вы можете ввести:
Это также рекомендуется стандартами кодирования Gnu
--help
.С другой стороны, сообщение об использовании, которое вы получаете, когда используете неверный параметр или пропускаете обязательный аргумент, должно идти в stderr, поскольку это сообщение об ошибке, и вы не хотите, чтобы оно передавалось следующей команде в конвейере.
Когда вы используете
--help
, сообщение об использовании является нормальным и ожидаемым выводом команды. Следовательно, он идет в стандартный вывод, поэтому его можно передать другой команде, напримерless
илиgrep
.Когда вы говорите
command --bogus-option | other-command
, вы не хотите, чтобы сообщение об использовании отправлялось на стандартный вывод, потому что теперь это неожиданный вывод, который не должен обрабатыватьсяother-command
. Кроме того, если выходные данные--help
содержат более нескольких строк, то сообщение об ошибке использования должно содержать только сводку--help
выходных данных и обращаться к пользователю--help
за дополнительной информацией.источник
--help
содержат более нескольких строк, то сообщение об использовании, созданное недопустимым параметром, должно быть просто кратким сообщением, которое необходимо использовать--help
для просмотра полной информации.