Если я пишу скрипт или программу, я должен вывести на stderr его имя вместе с предупреждением или сообщением об ошибке? Например:
./script.sh: Warning! Variable "var" lowered down to 10.
или:
./prog.py: Error! No such file: "file.cfg".
Я понимаю, что, как правило, это просто вопрос вкуса (особенно если вы пишете свои собственные вещи для себя), но мне интересно, есть ли что-нибудь обычное в этом? Я полагаю, что большинство утилит UNIX / Linux пишут свои имена, когда что-то происходит, так что это кажется хорошей вещью, но есть ли какие-либо рекомендации или невысказанные правила, как это сделать, а как нет?
Например, не рекомендуется устанавливать двоичные файлы под /usr/bin/
, скорее под /usr/local/bin/
или что-то еще. Существуют ли похожие правила вывода на stderr? Должен ли я написать имя с двоеточием? Или просто "Предупреждение!" и "Ошибка!" слова? Я ничего не мог найти, но, возможно, кто-то мог бы указать мне, где читать об этом.
Этот вопрос немного о методах программирования, но я подумал, что он более уместен здесь, а не над стековым потоком , поскольку речь идет о традициях UNIX / Linux, а не о программировании в целом.
источник
no such file
от того, кто знает, какая программа вfoo | bar | baz
конвейере.Ответы:
Обычной практикой является сохранение 0-го аргумента, передаваемого программе на C,
main
и использование его в качестве параметра дляperror
- для простых программ:назовите эту программу "foo", и ее запуск иллюстрирует суть:
Сложные программы могут добавлять к тексту (или использовать только имя файла без пути), но сохраняя имя программы, вы сможете определить, откуда взялась неправильно работающая программа.
Не существует общепринятой схемы для сообщений об ошибках, но некоторые широко используемые программы (такие как gcc) добавляют категорию сообщений, такую как «Ошибка» или «Предупреждение». Вот пример из одного из моих журналов сборки:
В этом примере gcc разделяет поля двоеточиями и добавляет категорию «предупреждение» после имени файла, номера строки, номера столбца - и перед фактическим сообщением. Но есть несколько вариантов, усложняющих для программ (таких как vi-like-emacs ) анализ информации.
Для компиляторов использование категории в сообщении упрощает обнаружение фатальных ошибок (которые могут быть не фатальными ) и предупреждений. Если ваша программа завершается с ошибкой, это не значит, что некоторые из них действительно являются предупреждениями, а некоторые - ошибками. Но когда он ведет себя по-другому (или продолжает работать более или менее), категория помогает диагностировать возникшую проблему.
источник
Если программа вызывается как часть сценария, в котором вызываются многие другие программы, и если она не печатает свое имя, то пользователям будет трудно (э) выяснить, откуда возникла ошибка.
(Если ошибка является неожиданным внутренним условием, которое может потребовать отладки, вам нужна дополнительная информация: не только имя программы, но и исходный файл и номер строки и, возможно, обратный след.)
источник