In script bash,echo to stderr e tee per registrare il file?
echo "errore" 1> & 2 | tee -a log
stamperà stderr sullo schermo ma nessun registro su file, come fare questi allo stesso tempo?
In script bash,echo to stderr e tee per registrare il file?
echo "errore" 1> & 2 | tee -a log
stamperà stderr sullo schermo ma nessun registro su file, come fare questi allo stesso tempo?
a ECHO il testo sia per il file di log e stderr, ma non stdout, prova questo:
echo "error" | tee -a log 1>&2
Ma impostazione predefinita solo stdout viene trasmesso in tubazioni, in modo che in
$ echo "error" | tee
tee
vede solo la stout dal echo
, non lo stderr. stderr verrà comunque visualizzato nel terminale.
echo "error" 1>&2 | tee -a log
Con la prima parte 1>&2
, quello che stai dicendo è: "Redirect stdout stderr". Quindi lo ha emesso l'output"error"
e passa a stderr.
Il tubo (|
) legge solo da stdout
, non stderr
. Quindi tee
non riceve alcun stdin
dal tubo. Quindi, non aggiunge nulla al file di registro.
+1. Risposta molto bella, tranne una soluzione: potrebbe essere utile menzionare '2> & 1' come corretto per questo scopo. – glglgl
sì, ic. Ma come echo su stderr e scrivi err log in file? – timy
@timy Se si * reindirizza * stderr a stdout, è possibile farlo: 'echo" errore "2> & 1 | tee -a log'. Ora entrambi gli stderr andranno allo stdout e potrai vedere entrambi sullo schermo e aggiungere anche il log. –
Per visualizzare sia stdout e stderr sulla console e inviare entrambi i corsi d'acqua per un registro, reindirizzare stderr su stdout come illustrato di seguito:
progam.sh 2>&1 | tee -a log
Non sono sicuro al 100% di ciò che l'OP voleva fare, ma questa è di gran lunga la soluzione migliore per il mio caso. Penso che il problema sia che è facile pensare che il reindirizzamento debba essere applicato a 'echo', ma farlo con il comando' tee' funziona perfettamente, grazie! – Haravikk