Ich verwende svn export
als Teil eines Packager-Skripts für meine Anwendung, und es sieht so aus, als ob dieser Befehl, wie viele andere, keine Fortschrittsanzeige aufweist.
Ich habe im Moment zwei Möglichkeiten:
- Verwenden Sie es ohne Optionen und sehen Sie zu, wie es Tausende von Zeilen druckt
- Verwenden
--quiet
und nichts sehen, bis es abgeschlossen ist.
Gibt es eine Möglichkeit, mindestens die Anzahl der vom Befehl ausgegebenen Zeilen in Echtzeit anzuzeigen? Sowie:
Exporting SVN directory ... 1234 files
Und sehen Sie dieses 1234
Zahleninkrement in Echtzeit ? Ich kann mir vorstellen, die Ausgabe an einen Befehl weiterzuleiten, der genau dies tun würde, aber welcher?
quelle
=
und `=` Unterschieden und Macken zu lernen . :) Warum sollten sie es nicht durch eine Sprache mit Python-ähnlicher Syntax ersetzen ...printf
endet das mit a\r
. Und was passiert , wenn Sie das tunecho -ne "$I\r"
oderprint -n "$I\r"
. :) Ich habe esprintf
jedoch verwendet, da es standardmäßig so eingestellt ist, dass am Ende keine neue Zeile gedruckt wird, so dass\r
nur zum Anfang zurückgekehrt wird. Leider unterstützen nicht alle Echo-Implementierungen das Argument-e
oder-n
.read
zuread -r
(da sonst am Ende einer Zeile würde Chaos mit der Auszählung eines Backslash). Übrigens kann dies mit ein wenig Arbeit angepasst werden, um auch die neueste Ausgabezeile anzuzeigen, was für einige Befehle nützlich sein kann.Dies ist eine grobe Idee, aber Sie können den
pv
Befehl verwenden, um die Anzahl der Zeilen im Verlauf zu zählen und diese auf dem Bildschirm anzuzeigen.pv
Unter den vielen Schaltern gibt es einen-l
Schalter, der jede Zeile zählt, während sie durchläuft.Beispiel
Hier verwende ich eine while-Schleife, um einige Dateien aus Ihrer SVN-Ausgabe zu simulieren.
Die Ausgabezeile wird weiterhin wie folgt überschrieben:
quelle
Sie können Ihren Befehl im Hintergrund als Job ausführen und sein stdout (und optional stderr) in eine Protokolldatei umleiten:
command > logfile &
Dabei&
bezeichnet job (wenn auch stderr, sagen Sie&>
statt>
).Dann können Sie das Dienstprogramm wordcount verwenden, um die Anzahl der Zeilen in Ihrer Protokolldatei mit zu zählen
wc -l
.Um die Zustandsänderung in einer sich dynamisch ändernden Zeile anzuzeigen, können Sie beispielsweise Folgendes verwenden
while true; do echo -en '\r'; wc -l logfile; sleep 1; done
, aber ich kann Bash nicht zwingen, einen\r
Wagenrücklauf zu zeichnen , um den Inhalt der vorherigen Zeile zu löschen.Siehe diese Frage, es ist fast ein Duplikat: /programming/2388090/how-to-delete-and-replace-last-line-in-the-terminal-using-bash
quelle
printf/print/echo
wie von Danny vorgeschlagen. :) Natürlich könnte er es gebrauchenless
, aber ich nehme an, er kann es sich leisten,wc -l logfile
jedes Mal zu sagen, wenn er ungeduldig wird. Ich denke, mitncurses
dem Bildschirm zu spielen oder ihn zu löschen, ist hier ein Overkill.echo -e 'r'
Befehl zu debuggen ? Es sollte den zuvor gedruckten Inhalt der Zeile löschen, damit er sich dynamisch ändert, aber ich kann es nicht erzwingen :(