Подтвердить что ты не робот

Должен ли я выводить предупреждения в STDERR или STDOUT?

Я создаю script, который обрабатывает предопределенный набор данных, выводящий в файл. Я хочу вывести предупреждение, когда одна точка привязки (которая всегда является "регулярной" в каждом наборе, к которой у меня был доступ) отличается тем, что это значение не обрабатывается (поскольку я не знаю, как это влияет на данные). Должен ли я выводить это предупреждение на stderr или stdout?

4b9b3361

Ответ 1

Если я сохранил вывод этого script (т.е. только stdout), чтобы обработать его позже, будет ли это предупреждение мешать тому, как выводится результат? Более того, если вывод передается на другой процесс, предупреждение должно появиться на терминале, поэтому пользователь сразу видит его.

По этим причинам, в общем, вы выводите предупреждения на stderr.

Ответ 2

Предупреждение должно быть отправлено на stderr.

В дополнение к точкам, представленным другими (что приводит к ошибкам синтаксического анализа для последующих процессов и скрытию ошибки от пользователя на консоли), существует проблема гибкости.

Если пользователь не хочет, чтобы предупреждение от stderr переходило к нисходящему процессу, который анализирует stdout, им не нужно ничего делать.

your_script | downstream_process

Если пользователь хочет, чтобы предупреждение от stderr перешло к нисходящему процессу, который будет анализировать stdout и stderr, пользователь может использовать 2 > & 1 для перенаправления stderr в stdout.

your_script 2>&1 | downstream_process

Если вы выводите как предупреждения, так и любые нормальные данные в stdout, у пользователя нет хорошего способа отделить предупреждения от данных без разбора всего. Поэтому отправка предупреждений в stderr дает вам более гибкую script.

Ответ 3

Реальный вопрос: если кто-то должен перенаправить вывод вашего script в файл, вы хотите, чтобы предупреждение помещалось в файл или направлялось пользователю?

Если вы ожидаете, что пользователь предпримет какие-либо действия в результате предупреждения, он должен перейти в STDERR. Если какой-то нисходящий поток script, скорее всего, будет отключен предупреждением, он должен перейти в STDERR.