2012-05-22 13 views
5

Sono nuovo all'utilizzo del comando tee.Utilizzo del comando tee prontamente anche per un comando

Sto provando a eseguire uno dei miei programmi che richiede molto tempo per terminare ma stampa le informazioni man mano che progredisce. Sto usando 'tee' per salvare l'output in un file e per vedere l'output nella shell (bash).

Ma il problema è tee non inoltra l'output alla shell fino alla fine del mio comando. C'è un modo per farlo?

Sto usando Debian e bash.

risposta

3

Questo in realtà dipende dalla quantità di output e dall'implementazione di qualsiasi comando in esecuzione. Nessun programma è obbligato a stampare roba direttamente su stdout o stderr e svuotarlo tutto il tempo. Pertanto, anche se la maggior parte dell'implementazione del runtime C viene eseguita dopo che una certa quantità di dati è stata scritta utilizzando una delle routine di runtime, ad esempio printf, ciò potrebbe non essere vero a seconda dell'implementazione.

It tee non lo invia subito, è probabile che riceva solo l'input alla fine della corsa del comando. È potrebbe essere utile per citare quale comando esatto è.

+0

Hai menzionato un punto eccellente! Ho dimenticato il rossore. Il comando è uno dei miei programmi C. Ho aggiunto il fflush dopo il mio printf. Ora sta funzionando. Grazie mille per l'aiuto rapido. – Rakib

+0

@Rakib Hasan: contento che funzioni per te ora. È un comportamento spesso trascurato, anche in vari linguaggi di scripting. – 0xC0000022L

0

Se si dovesse pubblicare il tuo utilizzo ho potuto dare una risposta migliore, ma come è

(for i in `seq 10`; do echo $i; sleep 1s; done) | tee ./tmp 

Is utilizzo corretto del comando tee e sembra funzionare. Sostituisci la parte prima del tubo con il tuo comando e dovresti essere pronto.

1

Il problema riscontrato è probabilmente correlato al buffering. Si può dare un'occhiata al comando stdbuf, che ha il seguente:

stdbuf - Esegui COMANDO, con operazioni di buffering modificate per i suoi flussi standard.

Problemi correlati