[Bash] Soucis avec wait

Résolu/Fermé
Lucas - 9 nov. 2010 à 13:43
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 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 !

3 réponses

dubcek Messages postés 18728 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 29 mai 2024 5 615
9 nov. 2010 à 14:15
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
0
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
0
dubcek Messages postés 18728 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 29 mai 2024 5 615
9 nov. 2010 à 14:32
utiliser xterm plutot que gnome-terminal
xterm -e "sleep 10" & pid=$! ; wait $pid ; echo aaaaaaaaaaaaaaaaaa
0
Je viens de tenter avec xterm, ça me fait exactement la même chose que le gnome-terminal. Le terminal s'ouvre pendant 0.5sec, se ferme, le suivant s'ouvre, ... Il y a définitivement un soucis x)
0
dubcek Messages postés 18728 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 29 mai 2024 5 615
9 nov. 2010 à 14:58
il y a peut-être un mesage d'erreur,
xterm -e "commande ;sleep 30" 
0
Je viens de regarder de fond en comble, pas d'erreur au niveau des format, je comprends pas trop. Quand j'ai pas de sleep à la fin, il exécute pas la commande, je en sais pas pourquoi, que y'en a un, ça marche -_-"

J'ai fait mes format comme ceci :
xterm -e "mkfs.vfat -F 32 -n boot /dev/$2""1" ; sleep 2
        xterm -e "mkfs.ext3 -b 4096 -L casper-rw /dev/$2""2" ; sleep 2
        xterm -e "mkswap -v1 /dev/$2""3" ; sleep 2
        swapon /dev/$2"3"; sleep 2
        xterm -e "mkfs.ext3 -b 4096 -L vmware /dev/$2""5" ; sleep 2
        xterm -e "mkfs.ext3 -b 4096 -L vmware_archives /dev/$2""6" ; sleep 2
        xterm -e "mkfs.vfat -F 32 -n eleve /dev/$2""7" ; sleep 2
        install-mbr /dev/$2 ; sleep 2


Ca passe mais j'aime pas trop le principe.

Par contre pour le téléchargement des fichiers, cela ne va pas : le premier se lance, 2 sec après le second se lance et après le script continue <_<. (Mes fichiers font entre 700mo et 1.1 Go, donc environ 10min de DL par fichier).
0
Je suis stupide, en mettant les sleep dans la commande que j'envoie au xterm ça passe impec' !
Merci de ton aide =)
0
En fait désormais je ne dois pas afficher le formatage car les utilisateurs pourraient interférer et causer des problèmes. J'ai donc pensé faire comme ceci :

                echo 10
                cat /home/emfdisk/Documents/tables.txt | sfdisk --no-reread -H255 /dev/$2 ; sleep 1
                echo 20
                mkfs.vfat -F 32 -n boot /dev/$2"1" ; sleep 1
                echo 30
                mkfs.ext3 -b 4096 -L casper-rw /dev/$2"2" ; sleep 1
                echo 40
                mkswap -v1 /dev/$2"3" ; sleep 1
                echo 50
                swapon /dev/$2"3" ; sleep 1
                echo 60
                mkfs.ext3 -b 4096 -L vmware /dev/$2"5" ; sleep 1
                echo 70
                mkfs.ext3 -b 4096 -L vmware_archives /dev/$2"6" ; sleep 1
                echo 80
                mkfs.vfat -F 32 -n eleve /dev/$2"7" ; sleep 1
                echo 90
                install-mbr /dev/$2 ; sleep 1 ; echo 100) | zenity --progress \
                --percentage=0 --auto-close --title="Formatage de $2"


Il me fait bien la tables des partitions en fonction du fichier txt, me formate la première puis fait les 5 suivantes en moins d'une seconde et continue le script. J'ai contrôler dans GParted, seule la première partition est formatée correctement.

Auriez-vous une idée ?
0