Kraft eines shell-Skripts fflush
Ich Frage mich, ob es möglich war zu sagen, bash, dass alle Aufrufe echo
oder printf
Folgen sollten durch einen nachfolgenden Aufruf fflush()
auf stdout/stderr jeweils?
Einen quick-and-dirty-Lösung wäre zu schreiben, dass meine eigenen printf-Implementierung, die Tat dies, und verwenden Sie es anstelle von entweder eingebaut, aber es fiel mir ein, dass ich vielleicht nicht brauchen, um.
Schreibe ich mehrere build-Skripte, die laufen, auf einmal, für das debugging muss ich wirklich müssen, finden Sie Nachrichten, die Sie schreiben, um.
- Nicht dass ich wüsste, denke ich, dass BASH ist völlig line-basiert, so dass Sie bündig auf einer Zeile für Zeile-basis, aber nicht mehr. Ist es erforderlich, die nicht bündig auf Zeilenumbrüche?
- Ja, ich habe zu eliminieren timing-bugs, wie ein Täter, also ich brauche zu machen sicher, dass jedes schreiben auf stderr / stdout bewirkt, dass der stream geleert werden.
- Greifen nach Strohhalmen: ich Frage mich, ob etwas mit
stty
helfen würde. Oder mit derexpect
Skript namensunbuffer
. Oder die Einstellung Bash istPS4
zu gehören$(date "+%s.%N")
(obwohl es ein bisschen overhead) und mitset -x
und Sortierung der Ausgabe. Vielleicht etwas mit `trap 'foo' DEBUG. Nicht dieser nützliche Informationen? Oder so etwas here? - Ich Schätze der stab. Das problem ist, ich bin das sammeln der dump aus mehreren hintergrund-Prozesse an einem Ort sind und brauchen, um sicher zu sein, dass ich sehe, Probleme mit der Anordnung vs Verzögerungen durch Pufferung.
- Außerdem, ich schaue, um zu sehen, wenn
stty
etwas angeboten wird, könnte helfen (oder vielleicht etwas enthüllen würde), kein Glück. - Hast du eine Lösung für dieses? Ich muss sehen, dass ein logfile als sein erzeugt durch einen hintergrund-Prozess.
- Ja, siehe die Antwort akzeptiert.
- Für Dateien: stackoverflow.com/questions/1429951/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn comands Verwendung von stdio und sind mit einem terminal verbunden werden Sie geleert werden pro Zeile.
Ansonsten müssen Sie mit so etwas wie stdbuf auf Befehle in eine pipe-line
http://www.pixelbeat.org/programming/stdio_buffering/
tl;dr: statt
printf ...
versuchen zu setzen, um das Skriptstdbuf -o0 printf ..
oderstdbuf -oL printf ...
xxprintf
dass nur spült der Bach / fd)Vielleicht "stty raw" können helfen, mit einigen anderen tricks für end-of-lines Handhabung. AFAIK "raw" - Modus schaltet die Zeile Pufferung der Nachrichten, zumindest, wenn Sie für die serielle Schnittstelle ("stty raw < /dev/ttyS0").
Wenn Sie erzwingen, dass die Datei zu Lesen, es scheint zu bewirken, dass die Puffer zu leeren. Diese Arbeit für mich.
Entweder Lesen Sie die Daten in eine nutzlose variable:
Oder machen Sie einen UUOC: