Sorry, mein sendmail hat rumgesponnen, deshalb forwarde ich mal
meine eigne Mail.
----- Forwarded message from "Jan Trippler\""
Manfred Tremmel schrieb:
Sorry, 2. Versuch, die erste Mail war noch nicht fertig ...
Am Samstag, 26. April 2003 13:59 schrieb Thomas Michalka:
[...] Also wenn die Werte zusammengehören und Du die auch in eine Variable legen kannst, tuts vielleicht ein:
VAR="A|0|Z B|1|Y C|2|X D|3|W E|4|V F|5|U"
for param in $VAR ; do parm_v=`echo $param | awk -F \| '{print $1}'` parm_n=`echo $param | awk -F \| '{print $2}'` parm_t=`echo $param | awk -F \| '{print $3}'` echo $param_v $param_n $param_t done
Es tut! Die Werte gehören in der Tat zusammen. Deswegen ist Deine Idee echt elegant und funktioniert.
Ich würde dafür nur keinen awk nehmen, ein einfacher cut -f1 -d\| tuts auch. awk ist dafür deutlich oversized und auch etwas ressourcenfressender. jan@k500:~/tmp> ls -l /bin/gawk /usr/bin/cut -rwxr-xr-x 1 root root 209420 Mär 25 2002 /bin/gawk -rwxr-xr-x 1 root root 18968 Mär 23 2002 /usr/bin/cut
awk '{print $'$position'}' # hier darf außer zw. 'print' und '$' KEIN Leerraum enthalten sein!!!
Unsinn, wo hast Du das denn her? jan@k500:~/tmp> pos=2 jan@k500:~/tmp> echo "1 2 3" | awk ' { print $'$pos' } ' 2 Lediglich das Konstrukt $'$pos' muss zusammen geschrieben werden. BTW: jan@k500:~/tmp> echo "1 2 3" | cut -f$pos -d" " 2 funktioniert genauso gut. [...]
# The mount point directory MP_DIR=/mnt
# ------------------------------------------------------------------------ POS_NUM=" 1 2 3 4 5 6 7 8 9" # ------------------------------------------------------------------------ DEV_NUM=" 2 5 6 7 8 9 10 11 12" MPT_LST=" 02 05 06 07 08 09 10 11 12" SRC_LST=" /boot / /root /tmp /opt /usr /usr/local /var /home" NME_LST=" BOOT_FS ROOT_FS ADMIN_FS TMP_FS OPT_FS USR_FS USRLOCAL_FS VAR_FS HOME_FS"
# Let's sync the filesystems now! for position in $POS_NUM ; do
devnum=$(echo -n $DEV_NUM | awk '{print $'$position'}') mpoint=$(echo -n $MPT_LST | awk '{print $'$position'}') source=$(echo -n $SRC_LST | awk '{print $'$position'}') fsname=$(echo -n $NME_LST | awk '{print $'$position'}')
Finde ich ziemlich umständlich, jetzt wo ich sehe, was Du damit machen willst. Wie wäre es so: echo "2 02 /boot BOOT_FS 5 05 / ROOT_FS 6 06 /tmp TMP_FS" |\ while read devnum mpoint source fsname; do ... done Man könnte auch eine Konfigurationsdatei aufbauen, die den gleichen Aufbau wie der echo haben kann, und dann geht es einfach mit: cat datei | while read devnum mpoint source fsname; do ...
# Is the file system already mounted? if [ 0 -eq $(mount | grep -c "\/dev\/hdb$devnum") ] ; then
David würden sich jetzt wieder die Fußnägel aufrollen ;-) if ! mount | grep -q /dev/hdb$devnum; then
mount /dev/hdb$devnum $MP_DIR/$mpoint & PID_MOUNT=$! wait $PID_MOUNT 2> /dev/null
Was hat das für einen Sinn? Du schickst den Prozess in den Hintergrund und anschließend wartest Du doch auf ihn. Warum dann nicht gleich mount /dev/hdb$devnum $MP_DIR/$mpoint und ich würde den Status abfragen! if ! mount /dev/hdb$devnum $MP_DIR/$mpoint; then echo Fehler beim mount exit 1 fi
fi
# RSync doesn't need a trailing '/' when syncing the root file system if [ "$source" = "/" ] ; then source=""
source=
fi echo -en "$(date +'%T'): Copying files in $fsname from $source/ to $MP_DIR/$mpoint/ ... "
# The '/' after 'source' ist MOST important to not copy # the mount point directory itself but its contents (see 'man (1) rsync')! rsync $RSYNC_OPTS $source/ $MP_DIR/$mpoint/ & PID_RSYNC=$! wait $PID_RSYNC 2> /dev/null ; echo "done (process $PID_RSYNC)."
Auch hier wieder: Was hat es für einen Sinn, das Kommando in den Hintergrund zu schicken, wenn Du doch auf die Beendigung wartest?
umount /dev/hdb$devnum
done
Jan ----- End forwarded message -----