2012-05-22 8 views
5

Ich bin neu in der Verwendung tee Befehl.Verwendung des T-Befehls prompt auch für einen Befehl

Ich versuche, eines meiner Programme zu starten, das viel Zeit in Anspruch nimmt, aber es gibt Informationen aus, während es fortschreitet. Ich verwende 'tee', um die Ausgabe in einer Datei zu speichern und um die Ausgabe in der Shell zu sehen (bash).

Aber das Problem ist tee leitet die Ausgabe nicht bis zum Ende meines Befehls Shell. Gibt es eine Möglichkeit, das zu tun? Ich verwende Debian und bash.

Antwort

3

Dies hängt tatsächlich von der Menge der Ausgabe und der Implementierung des Befehls ab, den Sie ausführen. Kein Programm ist verpflichtet, Sachen direkt an stdout oder stderr zu drucken und es ständig zu spülen. Obwohl die meisten C-Runtime-Implementierungen nach dem Schreiben einer bestimmten Datenmenge mit einer der Laufzeitroutinen, wie printf, flushed sind, ist dies in Abhängigkeit von der Implementierung möglicherweise nicht der Fall.

Es tee gibt es nicht sofort aus, es ist wahrscheinlich nur die Eingabe am Ende der Ausführung Ihres Befehls erhalten. Es könnte hilfreich sein, um zu erwähnen, welcher genaue Befehl es ist.

+0

Sie erwähnten einen ausgezeichneten Punkt! Ich habe die Spülung vergessen. Der Befehl gehört zu meinem eigenen C-Programm. Ich habe den fflush nach meinem printf hinzugefügt. Jetzt geht es. Vielen Dank für die schnelle Hilfe. – Rakib

+0

@Rakib Hasan: Ich bin froh, dass es jetzt für dich funktioniert. Es ist ein oft übersehenes Verhalten, auch in verschiedenen Skriptsprachen. – 0xC0000022L

0

Wenn Sie sind Ihre Nutzung schreiben, ich könnte eine bessere Antwort geben, aber wie es

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

Ist ordnungsgemäße Verwendung des T-Befehls und scheint zu funktionieren. Ersetzen Sie das Teil vor dem Rohr mit Ihrem Befehl und Sie sollten gut gehen.

1

Das Problem, mit dem Sie konfrontiert sind, hängt wahrscheinlich mit der Pufferung zusammen. Sie können sich den Befehl stdbuf ansehen, der Folgendes bewirkt:

stdbuf - Ausführen von COMMAND mit geänderten Pufferoperationen für seine Standarddatenströme.

Verwandte Themen