Das hier ist mal ein Tipp für alle Shell-Programmierer bzw. -Benutzer. Es gibt so bestimmte Programme wie zB. dd, gzip, tar, usw. , die während der Laufzeit keinen Status bzw. keinen Fortschritt anzeigen. Das ist sicherlich vom Programmierer auch so gewollt ist, kann aber manchmal bei der Benutzung etwas Frust erzeugen kann, da man nicht weiss, wann den der Prozess endlich seine Arbeit beenden wird bzw. wie performant ist der Befehl überhaupt.
Und genau hier hilft dieses kleine, wunderbare Opensource Tool pv, mit dem man den Fortschritt der Daten, die durch die Pipes laufen, beobachten kann.
Ubuntu bzw. Debian-Benutzer installieren einfach per apt-get install pv, RPM-basierte Linuxe finden auf der Entwicklerseite fertige Rpms. Und Mac User können das Paket mittels MacPorts installieren.
Beispiele
pv file | nc -w 1 somewhere.com 3000
(tar cf – . \
| pv -n -s `du -sb . | awk ‘{print $1}’` \
| gzip -9 > out.tgz) 2>&1 \
| dialog –gauge ‘Progress’ 7 70
Weitere Hilfen und Beispiele findet man im Manual.


24/12/2007 @ 08:24
Wunderbares Werkzeug!
24/12/2007 @ 09:01
Nachtrag: Leider ist die MacPorts Version veraltet und enthält problematische Mac OS Bugs. MacPorts Bugreport erstellt – http://trac.macosforge.org/projects/macports/ticket/13710
24/12/2007 @ 09:15
Das war mir im nachhinein auch aufgefallen. Du hast doch noch 10.4 oder? Ich hatte es erst auf 10.5 + Xcode 3 geschoben.
Leider habe ich es auch nicht geschafft, die Sourcen so zu kompilieren:
paris:pv-1.1.0 olif$ make all
gcc -O2 -Wall -s -I./src/include -Isrc/include -DHAVE_CONFIG_H -DLOCALEDIR=\”/usr/local/share/locale\” -c -o src/pv/file.o src/pv/file.c
In file included from src/pv/file.c:18:
/usr/include/sys/stat.h:261: error: redefinition of ‘struct stat’
Es bringt leider auch nichts #include rauszunehmen, dann bekomme ich das hier:
paris:pv-1.1.0 olif$ make all
gcc -O2 -Wall -s -I./src/include -Isrc/include -DHAVE_CONFIG_H -DLOCALEDIR=\”/usr/local/share/locale\” -c -o src/pv/file.o src/pv/file.c
src/pv/file.c: In function ‘pv_calc_total_size’:
src/pv/file.c:36: error: storage size of ‘sb’ isn’t known
src/pv/file.c:43: warning: implicit declaration of function ‘fstat’
src/pv/file.c:56: warning: implicit declaration of function ‘stat’
src/pv/file.c:72: warning: implicit declaration of function ‘S_ISBLK’
src/pv/file.c:86: warning: implicit declaration of function ‘S_ISREG’
src/pv/file.c:36: warning: unused variable ‘sb’
src/pv/file.c: In function ‘pv_next_file’:
src/pv/file.c:152: error: storage size of ‘isb’ isn’t known
src/pv/file.c:153: error: storage size of ‘osb’ isn’t known
src/pv/file.c:153: warning: unused variable ‘osb’
src/pv/file.c:152: warning: unused variable ‘isb’
make: *** [src/pv/file.o] Error 1
Hattest du das hinbekommen ?
24/12/2007 @ 10:16
Hier sieht alles gut aus (macos 10.4 + macports 1.600 + gcc 4.0.1-applebuild 5367)
mathias@mac:/tmp/pv-1.1.0$ ./configure && make && echo “pv build done
[..]
checking for libgen.h… yesconfigure: creating ./config.statusconfig.status: creating Makefileconfig.status: creating doc/lsmconfig.status: creating doc/quickref.1config.status: creating doc/pv.specconfig.status: creating src/.dummyconfig.status: creating src/include/config.hconfig.status: src/include/config.h is unchangedconfig.status: executing default commandsgcc -O2 -Wall -s -I./src/include -Isrc/include -DHAVE_CONFIG_H -DLOCALEDIR=\”/usr/local/share/locale\” -c -o src/main/help.o src/main/help.cgcc -O2 -Wall -s -I./src/include -Isrc/include -DHAVE_CONFIG_H -DLOCALEDIR=\”/usr/local/share/locale\” -c -o src/main/main.o src/main/main.cgcc -O2 -Wall -s -I./src/include -Isrc/include -DHAVE_CONFIG_H -DLOCALEDIR=\”/usr/local/share/locale\” -c -o src/main/options.o src/main/options.cgcc -O2 -Wall -s -I./src/include -Isrc/include -DHAVE_CONFIG_H -DLOCALEDIR=\”/usr/local/share/locale\” -c -o src/main/remote.o src/main/remote.cgcc -O2 -Wall -s -I./src/include -Isrc/include -DHAVE_CONFIG_H -DLOCALEDIR=\”/usr/local/share/locale\” -c -o src/main/version.o src/main/version.cld -r -o src/main.o src/main/help.o src/main/main.o src/main/options.o src/main/remote.o src/main/version.ogcc -O2 -Wall -s -I./src/include -Isrc/include -DHAVE_CONFIG_H -DLOCALEDIR=\”/usr/local/share/locale\” -c -o src/library/getopt.o src/library/getopt.cgcc -O2 -Wall -s -I./src/include -Isrc/include -DHAVE_CONFIG_H -DLOCALEDIR=\”/usr/local/share/locale\” -c -o src/library/gettext.o src/library/gettext.cld -r -o src/library.o src/library/getopt.o src/library/gettext.ogcc -O2 -Wall -s -I./src/include -Isrc/include -DHAVE_CONFIG_H -DLOCALEDIR=\”/usr/local/share/locale\” -c -o src/pv/cursor.o src/pv/cursor.cgcc -O2 -Wall -s -I./src/include -Isrc/include -DHAVE_CONFIG_H -DLOCALEDIR=\”/usr/local/share/locale\” -c -o src/pv/display.o src/pv/display.cgcc -O2 -Wall -s -I./src/include -Isrc/include -DHAVE_CONFIG_H -DLOCALEDIR=\”/usr/local/share/locale\” -c -o src/pv/file.o src/pv/file.cgcc -O2 -Wall -s -I./src/include -Isrc/include -DHAVE_CONFIG_H -DLOCALEDIR=\”/usr/local/share/locale\” -c -o src/pv/loop.o src/pv/loop.cgcc -O2 -Wall -s -I./src/include -Isrc/include -DHAVE_CONFIG_H -DLOCALEDIR=\”/usr/local/share/locale\” -c -o src/pv/number.o src/pv/number.cgcc -O2 -Wall -s -I./src/include -Isrc/include -DHAVE_CONFIG_H -DLOCALEDIR=\”/usr/local/share/locale\” -c -o src/pv/signal.o src/pv/signal.cgcc -O2 -Wall -s -I./src/include -Isrc/include -DHAVE_CONFIG_H -DLOCALEDIR=\”/usr/local/share/locale\” -c -o src/pv/transfer.o src/pv/transfer.cld -r -o src/pv.o src/pv/cursor.o src/pv/display.o src/pv/file.o src/pv/loop.o src/pv/number.o src/pv/signal.o src/pv/transfer.ogcc -O2 -Wall -s -o pv src/main.o src/library.o src/pv.o -lintl
pv build done
29/12/2007 @ 23:19
Patch fuer den Portfile:
http://trac.macosforge.org/projects/macports/attachment/ticket/13710/macports-pv-1.1.0.patch
Arbeitet nun einwandfrei. Ggf. selbst anwenden auf /opt/local/var/macports/sources/rsync.macports.org/release/ports/sysutils/pv/Portfile sowie
cd /opt/local/var/macports/sources/rsync.macports.org/release/ports/; sudo portindex; sudo port upgrade pv
09/10/2008 @ 20:21
Wie kann man MacPorts am einfachsten deinstallieren?
Google schon finde aber nix