Может ли программа выводить данные в STDERR и по-прежнему возвращать нулевой статус выхода?

Я работаю над рефакторингом некоторых скриптов Python, предназначенных для запуска из командной строки. Сценарии используют ведение журнала, в результате чего некоторые сообщения записываются в STDERR (среди прочего). Интересно, уместно ли для программы в Linux выводить в STDERR, но при этом возвращать нулевой (успешный) статус выхода. Я думал, что к STDERR следует обращаться только в том случае, если статус выхода не равен нулю.

П.С. Мне нужно захватить/обработать вывод из скриптов, и я хочу сделать это "правильно".

1
23.06.2020, 23:24
1 ответ

Да, программы могут выводить стандартную ошибку и по-прежнему возвращать нулевой статус выхода. Вы найдете множество спецификаций утилит POSIX, в которых указано, что «Стандартная ошибка должна использоваться только для диагностических сообщений ».

Наглядным примером программы, которая выводит в STDERR и возвращает 0, являетсяcrontab. Попробуйте

EDITOR=nano crontab -e 2> stderr.out; echo $?

Не изменяйте файл cron и выйдите из редактора. 0будет отражено, но в stderr.outбудет какое-то сообщение, например (в моем случае)

no crontab for user - using an empty one
No modification made
4
18.03.2021, 23:24

Теги

Похожие вопросы