Artikelformat

PV – Pipe Viewer

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.

Pv
Installation

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.

Links
http://www.ivarch.com/programs/pv.shtml

Autor: Oliver

Ich bin Oliver und habe den aptgetupdateDE Blog im Juli 2007 aus der Taufe gehoben. Man findet mich auch auf Twitter.

6 Kommentare

  1. 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 ?

  2. 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

  3. Wie kann man MacPorts am einfachsten deinstallieren?

    Google schon finde aber nix