Правила хорошего тона для command-line утилит:
— ввод через stdin
— результат в stdout
— остальное в stderr
— не забываем про exit code
Не понимаю, почему многие ими пренебрегают. Выполнять их не сложно.
IO через stdin/stdout важня для взаимодействия с другими инструментами через пайпы. Exit code, чтобы понять успешно ли было выполнение.
Тонкий момент про stderr: в него стоит писать весь вывод, не имеющий отношения к успешному результату работы. Не только ошибки.
Это критично при пайпинге, чтобы следующий инструмент не получил неожиданного на вход. Слить err&out при необходимости проще, чем разделить.