Se eu estiver escrevendo um script ou programa, devo enviar para stderr seu nome junto com uma mensagem de aviso ou erro? Por exemplo:
./script.sh: Warning! Variable "var" lowered down to 10.
ou:
./prog.py: Error! No such file: "file.cfg".
Entendo que geralmente é apenas uma questão de gosto (especialmente se você escreve suas próprias coisas para si mesmo), mas me pergunto se há algo convencional nisso. Eu acredito que a maioria dos utilitários UNIX / Linux escreve seus nomes quando algo acontece, então parece ser uma coisa boa, mas existem diretrizes ou regras tácitas sobre como fazer isso e como não fazer?
Por exemplo, não é aconselhável instalar os binários abaixo /usr/bin/
, abaixo de /usr/local/bin/
ou em outra coisa. Existem regras semelhantes sobre a saída para o stderr? Devo escrever o nome seguido de dois pontos? Ou apenas "Aviso!" e "Erro!" palavras? Não consegui encontrar nada, mas talvez alguém pudesse me indicar onde ler sobre isso.
Essa pergunta é um pouco sobre práticas de programação, mas achei mais apropriada aqui do que no stackoverflow , pois trata das tradições UNIX / Linux e não da programação em geral.
fonte
no such file
de quem sabe qual programa em umfoo | bar | baz
pipeline.Respostas:
É prática comum salvar o 0º argumento passado em um programa C
main
e usá-lo como parâmetro paraperror
- para programas simples:chame esse programa de "foo" e executá-lo ilustra o ponto:
Programas complicados podem ser adicionados ao texto (ou usar apenas o nome do arquivo sem o caminho), mas manter o nome do programa permite descobrir de onde veio um programa que se comporta mal.
Não existe um esquema universalmente aceito para mensagens de erro, mas alguns programas amplamente usados (como o gcc) adicionam uma categoria de mensagem como "Erro" ou "Aviso". Aqui está um exemplo de um dos meus logs de construção:
Neste exemplo, o gcc separa campos com dois pontos e adiciona uma categoria "aviso" após o nome do arquivo, número da linha, número da coluna - e antes da mensagem real. Mas existem várias variações, tornando complicado para programas (como o vi-like-emacs ) analisar as informações.
Para compiladores, o uso de uma categoria na mensagem simplifica a detecção de erros fatais (que podem não ser imediatamente fatais ) e avisos. Se o seu programa sair com um erro, não há muito a dizer que alguns são realmente avisos e outros são erros. Porém, quando se comporta de maneira diferente (ou continua a funcionar mais ou menos), a categoria ajuda a diagnosticar o problema encontrado.
fonte
Se um programa for chamado como parte de um script no qual muitos outros programas são chamados, e se não imprimir seu nome, os usuários terão dificuldade em descobrir de onde vem o erro.
(Se o erro for uma condição interna inesperada que pode exigir depuração, você deseja obter ainda mais informações: não apenas o nome do programa, mas um arquivo de origem e número de linha e, possivelmente, um rastreamento posterior.)
fonte