Hallo Jens, hallo Leute, Am Donnerstag, 23. Dezember 2004 00:43 schrieb Jens Nixdorf:
ich habe ein kleines Script geschrieben, bei dem ein User eine im Rechner 'steckende' CompactFlash-Karte per dd auf Festplatte sichern kann. [...]
In der Manpage zu dd steht, daß mit dem Signal USR1 ein Status auf stderr geschrieben wird. Leider kann ich den irgendwie nicht in meinem Script nutzen, oder auf stdout umleiten oder in eine Datei, um ihn dann auszulesen.
Hier ein paar Zeilen aus diesem Script:
FILENAME=`kdialog --getsavefilename ~/backup "*.img | Kartenimages"` dd if=/dev/hdc of=$FILENAME & PID= `ps -aeo "%p %c %a" | grep 'dd if /dev/hdc' | awk '{print $1}'` ^ Sollte da nicht ein = stehen?
Damit hast Du Dir einen recht seltenen Useless-Award verdient: den useless-use-of-ps-and-grep-and-awk-Award ;-) Und nebenbei bemerkt kannst Du auch noch einen false positive erwischen, weil grep auch sich selbst in der Prozessliste finden könnte. (Um das zu vermeiden, nach '[d]d if=/dev/hdc'] greppen.) Einfacher geht das gewünschte mit PID=$! direkt nach dem dd-Aufruf. siehe auch - man bash, Abschnitt "Special Parameters" [1]) - das Beispiel in man dd ;-)
STATUS=`kill -USR1 $PID 2<&1` kdialog --msgbox $STATUS
Wie bekomme ich für den Anfang die Ausgabe des kill-Befehls in die STATUS-Variable? Später will ich das in einer Schleife abfragen und mit einer Progress-Bar anzeigen.
Wie wärs einfach mit einer Überwachung der Dateigröße der von dd erstellten Datei? ;-) Frohe Weihnachten! Christian Boltz [1] $! ist möglicherweise bash-spezifisch - falls Du Dein Script auch auf anderen Rechnern mit sh statt bash laufen lassen willst, solltest Du das testen. -- Die Signatur will nicht angezeigt werden. Die gewuenschte Signatur ist zur Zeit nicht verfuegbar. Moeglicherweise ist sie gerade im Urlaub oder hat einfach keine Lust angezeigt zu werden. Oder wollen Sie staendig beobachtet werden?