Hallo, Am Fre, 27 Okt 2006, Al Bogner schrieb:
Am Freitag, 27. Oktober 2006 00:18 schrieb David Haller:
Am Don, 26 Okt 2006, Al Bogner schrieb:
Am Sonntag, 22. Oktober 2006 21:46 schrieb David Haller:
Schau's dir an, awk ist einfacher:
awk -v dev="$USBGERAET" '$1 ~ dev { print "umount "$1; }' /proc/mounts
| sh -x
Nun ja, in ein paar Monaten nicht mehr, wenn ich awk wieder brauche. Ich weis aber dann wo ich nachsehen kann ;-)
Das verwendet eigentlich nur awk Grundlagen, keinerlei Finessen. Der einzige "Trick" ist, dass per awk ein shellscript mit den passenden umount-Befehlen generiert wird, welches dann per pipe an sh verfuettert wird. Im Prinzip koennte man auch das noch in awk machen:
$1 ~ dev { system("umount "$1); }
wobei man da noch ne Fehlerbehandlung dazubauen sollte (Rueckgabewert von 'system')...
Hmmh, ich habe schon gemerkt, dass es ziemlich komplex werden kann, wenn man jeden möglichen Fehler abfangen will.
Es reicht meist nur zwischen OK und Fehler zu unterscheiden. Bsp: $1 ~ dev { r = system("umount "$1); if( r != 0 ) { exit r; } } Oder so ;)
Wie meinst du das mit der Fehlerbehandlung? Wenn das Script nicht abgebrochen wird, wird sowieso alles gelöscht. Warum sollte ein umount nicht klappen, wenn es als root ausgeführt wird?
Wenn z.B. noch auf den Mountpunkt zugegriffen wird (aus welchem Grund auch immer). Ist auch eine Frage der Paranoia ;)
In diesem Zusammenhang habe ich noch folgende theoretische Frage, da ich davon ausgehe, dass auf dem Stick nur 1 primäre Partition vorhanden ist.
Wie mounte ich alle vorhandenen Partitionen automatisch ähnlich den awk-umount-Konstrukt? Als Problem sehe ich die Zuordnung der mountpoints.
Ohne, dass die Partitionen in der fstab stehen? /proc/partitions auslesen?
Zur Zeit habe ich:
MOUNTVERZEICHNIS="/mnt" awk -v dev="$USBGERAET" '$1 ~ dev { print "umount "$1; }' /proc/mounts | sh -x mount "$USBGERAET"1 "$MOUNTVERZEICHNIS" ls -la "$MOUNTVERZEICHNIS"
Das reicht solange nur 1 primäre Partition verwendet wird.
Ich stelle mir vor, dass ich vorsichtshalber alle Partitionen abmelde und dann dynamische Mountpoints generiere.
MOUNTVERZEICHNIS="/mnt" awk -v dev="$USBGERAET" '$1 ~ dev { print "umount "$1; }' /proc/mounts | sh -x # bitte erst ohne das "| sh -x" testen! awk -v dev="$USBGERAET" \ -v mp="$MOUNTVERZEICHNIS" \ '$4 ~ dev"[0-9]+" { print "mkdir -p " mp "/" $4; print "mount -t auto /dev/" $4 " " mp "/" $4; }' /proc/partitions | sh -x ls -la "${USBGERAET}"*/ Oder so ;) [..]
mkdosfs -v -F 32 -n "$STICKNAME" "$USBGERAET"1
^^^^^^^^^^^^^ "${USBGERAET}1"
Liest sich IMHO einfacher, ist aber mehr Geschmackssache.
mount "$USBGERAET"1 /mnt
Dito. Bei beiden fehlt aber ne Fehlerbehandlung.
Wie sollte die aussehen und warum?
Je nach dem ob du das Script bei nem Fehler abbrechen willst und ob du ne Fehlermeldung willst. Wenn du bei Fehlern abbrechen willst reicht auch ein 'set -e' vorher (und ggfs. 'set +e' anschliessend. Bei einzelnen Befehlen: '|| exit 1' und aehnliches. [..]
Das duerfte die Rechte versauen. Besser: Rechte mit FAT 32? Siehe oben Partitionstyp ist b.
Achja ;)
Beim Ab- und Anstecken des Scripts meckert dann KDE 3.5.5, dass kein "Mail versandt werden konnte, oder so ähnlich.
Wie wird das script aufgerufen? Da soll wohl eine Ausgabe per Mail versandt werden... Oder so ;)
Nein, kein Mail. Das Script wird aus einem Root-Terminal aufgerufen.
Seltsam. Udev? Hal? hotplug? [..] -dnh -- We're Germans and we use Unix. That's a combination of two demographic groups known to have no sense of humour whatsoever. -- Hanno Mueller, de.comp.os.unix.programming