Existe-t-il une directive officielle POSIX, GNU ou autre indiquant l'endroit où les rapports d'avancement et les informations de journalisation (des choses telles que "Doing foo; foo done") doivent être imprimés? Personnellement, j'ai tendance à les écrire sur stderr pour pouvoir rediriger stdout et obtenir uniquement la sortie réelle du programme. On m'a récemment dit que ce n'était pas une bonne pratique puisque les rapports d'avancement ne sont pas réellement des erreurs et que seuls les messages d'erreur doivent être imprimés sur stderr.
Les deux positions ont du sens, et vous pouvez bien sûr choisir l’une ou l’autre en fonction des détails de ce que vous faites, mais je voudrais savoir s’il existe une norme communément acceptée à cet égard. Je n'ai pas pu trouver de règles spécifiques dans POSIX, dans les normes de codage GNU, ni dans aucune autre liste de bonnes pratiques largement acceptée.
Nous avons quelques questions similaires, mais elles ne traitent pas de cette question précise:
Quand utiliser la redirection vers stderr dans les scripts de shell : La réponse acceptée suggère ce que j'ai tendance à faire: conservez la sortie finale du programme sur stdout et sur toute autre chose pour stderr. Cependant, ceci est simplement présenté comme une opinion d'utilisateur, bien que soutenue par des arguments.
Le message d'utilisation doit-il aller à stderr ou stdout? : Ceci est spécifique aux messages d’aide mais cite la norme de codage GNU. C'est le genre de chose que je recherche, mais pas uniquement pour aider les messages.
Alors, y a-t-il des règles officielles sur l'endroit où les rapports d'avancement et autres messages informatifs (qui ne font pas partie du résultat réel du programme) doivent être imprimés?
stdout
c’est en fait un moyen sûr et correct de relayer les filateurs et d’autres messages informatifs, mais comme le disent de nombreux programmeurs, «le silence est d’or. Ne rien produire si tout va bien. donc en fait, stderr est toujours utilisé pour faire en raison de la définition vague et StdOut aussi peut briser le tube sequence.for guide officiel
stderr
pour signaler les messages d'erreur, sauf lorsqu'un --verbose
indicateur est utilisé, auquel cas les rapports d'avancement sont également inclus.
stdout
avec les résultats est un moyen sûr de rendre les résultats inutiles. Si vous avez besoin de transférer les résultats vers un autre programme, celui-ci devra séparer les résultats des filateurs. De plus, si vous redirigez la sortie vers un fichier, vous ne pourrez pas voir les fileurs. A MON HUMBLE AVIS.