Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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