2012-11-13 10 views

risposta

9

a ECHO il testo sia per il file di log e stderr, ma non stdout, prova questo:

echo "error" | tee -a log 1>&2 
+0

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

0

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.

8
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.

+3

+1. Risposta molto bella, tranne una soluzione: potrebbe essere utile menzionare '2> & 1' come corretto per questo scopo. – glglgl

+0

sì, ic. Ma come echo su stderr e scrivi err log in file? – timy

+0

@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. –

5

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 
Problemi correlati