Esiste un POSIX ufficiale, GNU o altre linee guida su dove dovrebbero essere stampate le relazioni sui progressi e le informazioni di registrazione (cose come "Fare foo; foo done")? Personalmente, tendo a scriverli su stderr in modo da poter reindirizzare stdout e ottenere solo l'output effettivo del programma. Recentemente mi è stato detto che questa non è una buona pratica poiché i rapporti sui progressi non sono in realtà errori e solo i messaggi di errore dovrebbero essere stampati su stderr.
Entrambe le posizioni hanno un senso, e ovviamente puoi scegliere l'una o l'altra a seconda dei dettagli di ciò che stai facendo, ma vorrei sapere se esiste uno standard comunemente accettato per questo. Non sono stato in grado di trovare regole specifiche in POSIX, negli standard di codifica GNU o in qualsiasi altro elenco di best practice ampiamente accettato.
Abbiamo alcune domande simili, ma non affrontano questo problema esatto:
Quando utilizzare il reindirizzamento a stderr negli script di shell : la risposta accettata suggerisce ciò che tendo a fare, mantenere l'output finale del programma su stdout e qualsiasi altra cosa su stderr. Tuttavia, questo è appena presentato come opinione dell'utente, sebbene supportato da argomenti.
Il messaggio di utilizzo dovrebbe andare su stderr o stdout? : Questo è specifico per aiutare i messaggi ma cita lo standard di codifica GNU. Questo è il tipo di cosa che sto cercando, non solo per aiutare i messaggi.
Quindi, ci sono delle regole ufficiali su dove dovrebbero essere stampati rapporti sullo stato di avanzamento e altri messaggi informativi (che non fanno parte dell'output effettivo del programma)?
stdout
è in realtà un modo sicuro e giusto per spingere i filatori e altri messaggi informativi, ma come molti programmatori dicono "Il silenzio è d'oro. Non produrre nulla se tutto va bene. ' quindi, in effetti, stderr è sempre usato per farlo a causa della definizione vaga e anche stdout potrebbe interrompere la sequenza di tubi. per guida ufficiale
stderr
per segnalare messaggi di errore, tranne quando --verbose
viene utilizzato un flag, a quel punto vengono inclusi anche i rapporti sullo stato di avanzamento.
stdout
insieme ai risultati è un modo sicuro per rendere inutili i risultati. Se hai mai bisogno di convogliare i risultati ad un altro programma, detto programma dovrebbe separare i risultati dagli spinner. Inoltre, se reindirizzi l'output su un file non sarai in grado di vedere i filatori. A PARER MIO.