#1 Le 01/11/2013, à 17:53
- Arbiel
Exécution d'un pipeline en mode synchrone ou en mode asynchrone
Bonsoir à vous tous
Pour sélectionner un répertoire à partir d'une liste présentée par zenity et initialement construite par une recherche avec la commande find, j'ai écrit
function quel_grub() {
########################################################################################
# Présentation de la liste des répertoires et demande de sélection par l'utilisateur
########################################################################################)
[[ -z "${grub_dir}" ]] && grub_dir=$(sudo find / -path */grub/grub.cfg | sed -e "s^/grub.cfg^^" | while \
read a; do echo false; echo "${a}"; done | zenity --list \
--title "Répertoires /grub disponibles" \
--text="Choisir le répertoire qui sera utilisé pour réamorcer le PC" \
--multiple --column="Sélection" --column="Répertoire" --radiolist \
--print-column=2 --separator="" --width=300 --height=200 2>/dev/null)
[[ -z "${grub_dir}" ]] && return 1 || return 0
}
Explications :
sudo find / -path */grub/grub.cfg | sed -e "s^/grub.cfg^^" : obtention des répertoires de nom "grub" contenant un fichier grub.cfg
while read a; do echo false; echo "${a}"; done : construction de la liste pour zenity
zenity … 2g>/dev/null : présentation par zenity pour sélection du répertoire
L'écran zenity apparaît bien avant la fin de la recherche. J'en ai conclu que les commandes de mon pipeline s'exécutaient de manière asynchrone, alors qu'elles ne se terminent pas par &.
Merci d'avance à quiconque m'indiquera comment les faire s'exécuter en mode synchrone.
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#2 Le 05/11/2013, à 08:57
- pingouinux
Re : Exécution d'un pipeline en mode synchrone ou en mode asynchrone
Bonjour,
Je viens de faire un essai simplifié en temporisant la sortie de la boucle. La fenêtre zenity apparaît bien aussitôt, mais elle continue à se remplir ensuite.
for a in choix1 choix2 choix3 choix4
do
echo false; echo "${a}"; sleep 1;
done | \
zenity --list --radiolist --column="col1" --column="col2" --print-column=2 2>/dev/null
D'autre part, il me semble que l'option --multiple n'est pas compatible avec --radiolist.
Hors ligne
#3 Le 05/11/2013, à 17:03
- Arbiel
Re : Exécution d'un pipeline en mode synchrone ou en mode asynchrone
Effectivement, --multiple ne va pas vraiment bien avec --radiolist !! Je vais corriger.
De ton test dois-je conclure que "find" fonctionne systématiquement en mode asynchrone ?
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#4 Le 05/11/2013, à 17:24
- pingouinux
Re : Exécution d'un pipeline en mode synchrone ou en mode asynchrone
Dans mon test, je n'utilise pas find. Dans ton cas, comme dans le mien, zenity démarre immédiatement, mais ne retourne une valeur et ne rend la main que lorsque la boucle précédente se termine.
Hors ligne