Shell-Pufferung für CygWin: Ist das möglich?
Ich habe getestet, wie CygWin "ls -R" mit einem großen Verzeichnis ausführt und die Ausgabe an eine Test.txt
Datei sendet. Der Vorgang dauert also etwa 30 Sekunden. Die Datei wird erstellt, ist aber leer . es wird nur gefüllt werden, wenn die „ls -R“ Befehl beendet, und ich brauche der Dateiinhalt mittlerweile neue Daten sehen eintreten.
Das Problem soll von der Pufferung stammen, die das Betriebssystem vor dem Schreiben in die Datei vornimmt.
Das habe ich getestet, um ohne Pufferung in die Datei zu schreiben:
- Der Unbuffer- Befehl aus dem
expect
Paket: Wo ist es? Moderneexpect
Version hat keinen solchenunbuffer
Befehl (siehe unten):
./unbuffer -p ls / cygdrive / y / Repositorio / -R> Test.txt ./unbuffer ls / cygdrive / y / Repositorio / -R | tee Test.txt ./unbuffer -p ls / cygdrive / y / Repositorio / -R | tee Test.txt ./unbuffer ls / cygdrive / y / Repositorio / -R | ./unbuffer -p egrep "" | tee Test.txt ./unbuffer -p ls / cygdrive / y / Repositorio / -R | ./unbuffer -p egrep "" | tee Test.txt
- Installieren Sie das Expect- Paket und benennen Sie dieses Skript mit "unbuffer":
#! / usr / bin / expect - # Beschreibung: Unbuffer stdout eines Programms # Autor: Don Libes, NIST eval spawn -noecho $ argv Timeout -1 einstellen erwarten von
- Installieren Sie das Expect- Paket und benennen Sie dieses andere Skript mit "unbuffer":
#! / usr / bin / expect - # Beschreibung: Unbuffer stdout eines Programms # Autor: Don Libes, NIST if {[string vergleich [lindex $ argv 0] "-p"] == 0} { # Pipeline set stty_init "-echo" eval spawn -noecho [lrange $ argv 1 end] close_on_eof -i $ user_spawn_id 0 interagieren eof { # Flush verbleibende Ausgabe von Kind Erwarten Sie -timeout 1 -re. + Rückkehr } } } else { setze stty_init "-opost" Timeout -1 einstellen eval spawn -noecho $ argv erwarten von }
- Der Skriptbefehl :
Skript -c "ls / cygdrive / y / Repositorio / -R" | tee Test.txt Skript -c "ls / cygdrive / y / Repositorio / -R" / dev / null | tee Test.txt Skript -q -c "ls / cygdrive / y / Repositorio / -R" / dev / null | tee Test.txt Skript -q -c "ls / cygdrive / y / Repositorio / -R" / dev / null | grep "" --line-gepuffert | tee Test.txt Skript -q -c "ls / cygdrive / y / Repositorio / -R" / dev / null | egrep "" --line-gepuffert | tee Test.txt
- Der Befehl egrep mit Unpufferung:
cat BigFile.txt | egrep "" --line-gepuffert | tee Test.txt
Das stdbuf : Es gibt es nicht auf dem modernen CygWin, glaube ich.
Andere Methoden:
ls / cygdrive / y / Repositorio / -R 1> & 2 | tee Test.txt ls / cygdrive / y / Repositorio / -R 1> & 2 | & tee Test.txt
Tests mit
bash
und durchgeführtmintty
.Alles in diesen Threads geprüft und getestet :
"Tail -f" -Ausgabe in eine andere Datei schreiben
https://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe
https://serverfault.com/questions/294218/is-there-a -way-to-redirect-Ausgabe-in-eine-Datei-ohne-Pufferung auf Unix-Linux
Die Ergebnisse sind immer gleich: Die Ausgabedatei Test.txt
wird nur am Ende des Befehls "ls -R" gefüllt.
Weitere Ideen bitte?
0 Antworten auf die Frage
Verwandte Probleme
-
6
Welche zsh-Funktionen verwenden Sie?
-
8
Die Windows-Shell töten
-
4
Cygwin-Eingabeaufforderung ändern
-
3
Mac OS X: herkömmliche Orte, an denen Binärdateien gespeichert werden sollen
-
2
Mac OS X: einfaches Skript gesucht
-
2
Wie finde und vergleiche ich ähnliche Dateien im Dropbox-Ordner?
-
1
ksh entspricht perl $! Fehlerursache
-
3
Herausfinden, welcher Nicht-Symlink-Pfad wäre?
-
4
Wie kann ich ein Dateieigenschaftsdialogfeld von der Befehlszeile aus starten?
-
3
Cygwin tragbar?