[Bash] Soucis avec wait
Résolu
Lucas
-
zipe31 Messages postés 36402 Date d'inscription Statut Contributeur Dernière intervention -
zipe31 Messages postés 36402 Date d'inscription Statut Contributeur Dernière intervention -
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 :
(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 !
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 !
A voir également:
- [Bash] Soucis avec wait
- Bingo bash - Télécharger - Divers Jeux
- Bash addition ✓ - Forum Shell
- Updating biss key please wait ✓ - Forum TV & Vidéo
- Comment entrer le Key biss de la entv dans une télé stream system avec un démo i - Forum TV & Vidéo
- Bash list ✓ - Forum Shell
3 réponses
hello
le gnome-terminal termine tout de suite alors qu'il a lancé la commande.
on peut le voir avec cet exemple
le sleep attend alors que le wait termine
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
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 =/
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
utiliser xterm plutot que gnome-terminal
xterm -e "sleep 10" & pid=$! ; wait $pid ; echo aaaaaaaaaaaaaaaaaa
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 :
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).
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).
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 :
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 ?
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 ?