Les Allergies
Alimentaires
Posez votre question Signaler

[Bash] Soucis avec wait [Résolu]

Lucas - Dernière réponse le 10 nov. 2010 à 16:38
Bonjour à tous et à toutes,
J'ai un petit soucis avec la commande wait en bash, j'ai déjà lu ce que j'ai trouvé sur ce forum et sur internet, et après de multiples tentatives je m'en remets à vous. Voici un bref résumé de la chose.
Je réalise actuellement un script pour transformer un disque dur USB en disque dur liveUSB avec persistence.
Les étapes du script dans les grandes lignes :
- Détecter les disques connectés
- Choisir le ou les disques à tranformer
- Formatage des disques suivant une tables des partitions prédéfinie (7 partitions)
- Montage d'une partition comme mémoire tampon
- Si c'est le premier disque de la liste (ou le seul) : rapatriement des fichiers importants qui sont stockés sur un serveur vers la zone tampon puis décompression des fichiers
- Sinon décompression des fichiers directement depuis la zone tampon
Vu la longueur et la complexité du script je ne vais pas tout poster, voici donc juste la partie embêtante :
getFile "tables.txt" "/home/emfdisk/Documents" "0" & pid=$!
        wait $pid
        cat /home/emfdisk/Documents/tables.txt | sfdisk --no-reread -H255 /dev/$2 & pid=$!
        wait $pid
        gnome-terminal -t "Formatage de /dev/$2""1" -e "mkfs.vfat -F 32 -n boot /dev/$2""1" & pid=$!
        wait $pid
        gnome-terminal -t "Formatage de /dev/$2""2" -e "mkfs.ext3 -b 4096 -L casper-rw /dev/$2""2" & pid=$!
        wait $pid
        gnome-terminal -t "Formatage de /dev/$2""3" -e "mkswap -v1 /dev/$2""3" & pid=$!
        wait $pid
        swapon /dev/$2"3" & pid=$!
        wait $pid
        gnome-terminal -t "Formatage de /dev/$2""5" -e "mkfs.ext3 -b 4096 -L vmware /dev/$2""5" & pid=$!
        wait $pid
        gnome-terminal -t "Formatage de /dev/$2""6" -e "mkfs.ext3 -b 4096 -L vmware_archives /dev/$2""6" & pid=$!
        wait $pid
        gnome-terminal -t "Formatage de /dev/$2""7" -e "mkfs.vfat -F 32 -n eleve /dev/$2""7" & pid=$!
        wait $pid
        install-mbr /dev/$2 & pid=$!
        wait $pid

(Je sais c'est moche)
En théorie si j'ai bien lu mon man, chaque formatage devrait attendre la fin du précédent avant de se lancer, or ils se lancent tous en même temps =/ Donc un swapon sur une swap pas formatée et ainsi de suite c'est pas très beau au final.
Pouvez-vous éclairer ma lanterne ? =)
Merci d'avance !
Lire la suite 

[Bash] Soucis avec wait »

17 réponses
Réponse
+0
moins plus
hello
le gnome-terminal termine tout de suite alors qu'il a lancé la commande.
on peut le voir avec cet exemple
$ gnome-terminal -e "sleep 10" & pid=$! ; wait $pid ; echo aaaaaaaaaaaaaaaaaa

le sleep attend alors que le wait termine
Ajouter un commentaire
Réponse
+0
moins plus
Ouais effectivement. Le soucis c'est que j'aime bien afficher ce qui se passe plutôt qu'un message ou une progress bar avec Zenity.
Je pourrais utiliser un sleep 10 sur le formatage, mais dans la suite de mon script j'aurais quand même besoin d'un wait pid lorsque je télécharge les fichiers du serveur, vu que la vitesse dépend de la charge réseau je peux pas le prévoir à l'avance =/

if [ "$2" == "$firstDisk" ]
    then
        mount -t ext3 /dev/$2"6" $filePath & pid=$!
        wait $pid
        getFile "boot-partition.zip" $filePath "1" & pid=$!
        wait $pid
        getFile "backup.tgz" $filePath "2" & pid=$!
        wait $pid
        installDisk $2
    else
        installDisk $2

    fi
Ajouter un commentaire
Réponse
+0
moins plus
utiliser xterm plutot que gnome-terminal
xterm -e "sleep 10" & pid=$! ; wait $pid ; echo aaaaaaaaaaaaaaaaaa
zipe31- 10 nov. 2010 à 15:50
Même comme ça sur le 1er ( :

                echo 10
                (cat /home/emfdisk/Documents/tables.txt | sfdisk --no-reread -H255 /dev/$2) & wait
Lucas - 10 nov. 2010 à 16:10
Ouais ça marche :
(cat /home/emfdisk/Documents/tables.txt | sfdisk --no-reread -H255 /dev/$2) & wait

en mettant des wait sur tout les suivant aussi. Mais pourquoi ça marchait pas avant, et marche maintenant avec de simples parenthèses ? <_<
zipe31- 10 nov. 2010 à 16:38
Surement le fait du "pipe" dans la 1ère commande. Le fait de regrouper les commandes entre parenthèses (on crée du coup un processus fils), le wait attend la fin du processus de l'ensemble des commandes et non celui de "sfdisk" seulement... mais j'avoue ne pas être sûr à 100% de ce que te dit là ;-\
Ajouter un commentaire
Ce document intitulé « [Bash] Soucis avec wait » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?