Pages : 1
#1 Le 12/06/2024, à 01:50
- 999LOD666
Script utilisant dialog
Bonjour.
Je ne connais pas grand chose à la programmation script et après avoir consulté une bonne cinquantaine de pages et sites dédiés à "dialog" et ses exemples, je ne sais pas comment réaliser la fonction suivante.
Je pars sur la base de ce script pour réaliser un projet de menu de sélection d'applications locales :
#!/bin/bash
cmd=(dialog --separate-output --checklist "Select options:" 22 76 16)
options=(1 "Option 1" off # any option can be set to default to "on"
2 "Option 2" off
3 "Option 3" off
4 "Option 4" off)
choices=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)
clear
for choice in $choices
do
case $choice in
1)
echo "First Option"
;;
2)
echo "Second Option"
;;
3)
echo "Third Option"
;;
4)
echo "Fourth Option"
;;
esac
done
Il permet de sélectionner plusieurs items - comme je le souhaite - mais j'aimerais qu'en sélectionnant la "Première option" toutes les autres soient aussi sélectionnées, c'est à dire l'équivalent d'un "Tout sélectionner" en choisissant la seule "Première option" et uniquement celle-ci.
Est-ce possible ?
Merci d'avance pour votre aide.
Dernière modification par Ayral (Le 12/06/2024, à 14:58)
Hors ligne
#2 Le 12/06/2024, à 03:02
- Watael
Re : Script utilisant dialog
salut,
comme ça ?
st=off
rslt=($(dialog --stdout --checklist 'bla bla' 30 60 20 1 'Select all' $st 2 DEF $st 3 IJK $st)); for i in ${rslt[@]}; do if ((i==1)); then st=on; rslt=($(dialog --stdout --checklist 'bla bla' 30 60 20 1 'Select all' $st 2 DEF $st 3 IJK $st)); fi; done #Ici, j'écris tout sur une ligne pour forcer l'enchaînement en ligne de commandes. Ce n'est pas nécessaire dans un script.
clear
printf '%s\n' "${rslt[@]}" # pour visualiser afin de debuggage
ça demande d'accepter deux fois la liste.
ps: j'ai mis les options en dur, mais il vaut mieux les "variabiliser".
Dernière modification par Watael (Le 12/06/2024, à 11:44)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 12/06/2024, à 05:22
- lynn
Re : Script utilisant dialog
Bonjour,
Il manque une quote avant Select all'
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#4 Le 12/06/2024, à 06:22
- xubu1957
Re : Script utilisant dialog
Bonjour,
Pour ajouter toi-même les balises code à ton précédent message #1 : Notre modérateur Ayral l'a fait.
Cliquer sur le lien « Modifier » en bas à droite du message
Sélectionner le texte
Cliquer sur le <> de l'éditeur de message
comme indiqué dans le : Retour utilisable de commande
Dernière modification par xubu1957 (Le 12/06/2024, à 16:51)
Conseils pour les nouveaux demandeurs et pas qu'eux
Important : Pensez à passer vos sujets en [Réso|u] lorsque ceux-ci le sont, au début du titre en cliquant sur Modifier sous le premier message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci. Membre de Linux-Azur
En ligne
#5 Le 12/06/2024, à 11:45
- Watael
Re : Script utilisant dialog
Bonjour,
Il manque une quote avant Select all'
pas du tout.
merci.
Dernière modification par Watael (Le 12/06/2024, à 11:45)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#6 Le 15/06/2024, à 01:21
- 999LOD666
Re : Script utilisant dialog
Bonjour.
Tout d"abord un grand merci @Watael pour sa réactivité et la solution proposée. J'ai d'ailleurs presque immédiatement commencé la saisie pour mon projet sur cette proposition de script parfaitement fonctionnelle.
Cependant, la solution "idéale" pour les fonctionnalités que je souhaite est venue d'un autre forum d'aide. Les options du case de mon script appellent tout simplement un autre script uniquement constitué de fonctions (plus de 120). Cette version dispose de 2 boutons permettant de tout sélectionner ou de décocher toutes les sélections faites.
Je vous livre le script tel qu'il m'a été soumis, il pourra peut-être servir à d'autres.
#!/bin/bash
onoff=off
cmd=(dialog --output-fd 1 --separate-output --extra-button --extra-label "Select All" --cancel-label "Select None" --checklist "Select options:" 0 0 0)
load-dialog () {
options=(
1 "Option 1" $onoff
2 "Option 2" $onoff
3 "Option 3" $onoff
4 "Option 4" $onoff
)
choices=$("${cmd[@]}" "${options[@]}")
}
load-dialog
exit_code="$?"
while [[ $exit_code -ne 0 ]]; do
case $exit_code in
1) clear; onoff=off; load-dialog;;
3) clear; onoff=on; load-dialog;;
esac
exit_code="$?"
done
clear
for choice in $choices
do
case $choice in
1) echo "First Option";;
2) echo "Second Option";;
3) echo "Third Option";;
4) echo "Fourth Option";;
esac
done
Par ailleurs, voici la source originelle de cette solution :
https://stackoverflow.com/questions/673 … 9#67383279
Merci encore pour votre aide.
Dernière modification par 999LOD666 (Le 15/06/2024, à 01:25)
Hors ligne
#7 Le 15/06/2024, à 05:16
- Watael
Re : Script utilisant dialog
load-dialog
exit_code="$?"
while [[ $exit_code -ne 0 ]]; do
case $exit_code in
1) clear; onoff=off; load-dialog;;
3) clear; onoff=on; load-dialog;;
esac
exit_code="$?"
done
clear
for...
il me semble que ce code pourrait être simplifié de cette façon, parce que while NOT = until :
until load-dialog
do
case $? in
1) onoff=off;;
3) onoff=on;;
esac
clear
done
for...
je ne peux pas tester; à toi de confirmer si ça fonctionne...
je n'aime pas enregistrer le code de retour pour le traiter immédiatement alors que la commande vient juste d'être exécutée.
Dernière modification par Watael (Le 15/06/2024, à 05:20)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#8 Le 17/06/2024, à 15:56
- 999LOD666
Re : Script utilisant dialog
Bonjour Watael
En effet, la loi des inverses s'applique ici aussi.
Cependant, le clear doit être déplacé après done sinon l'appel à mon autre script contenant les fonctions écrit par-dessus celui-ci.
Merci encore pour l'aide, la compétence et la gentillesse.
Hors ligne
#9 Le 18/06/2024, à 11:35
- LukePerp
Re : Script utilisant dialog
Lod, je te propose de regarder du côté de la commande yad permettant de faire des trucs similaires mais avec une fenêtre moderne. Les possibilités sont + grandes.
Voici des exemples :
https://yad-guide.ingk.se/examples/examples.html
Gamer inside - Ubuntu Mate dernière LTS - Intel i5, 16 Go - Dual boot Windows - Ethereum user
Hors ligne
#10 Le 18/06/2024, à 18:43
- 999LOD666
Re : Script utilisant dialog
Bonsoir Watael
Ah oui ! En effet, c'est d'un look très Windowzé mais ça a l'air puissant.
Je suis PRESQUE au bout de mes turpitudes avec mes fonctions manipulées par dialog. Je verrai ultérieurement pour envisager une version plus "look 'n' feel" avec Yad.
Après avoir, dans une autre vie d'une autre dimension, utilisé assez longuement RedHat (5 si je me souviens bien) et Mandriva, j'utilise - depuis pas mal de temps maintenant - essentiellement 3 distributions :
- Mint (la 20.3 EDGE et la 21.EDGE)
- Garuda
- OpenSUSE Tumbleweed
Cette commande Yad fait penser à Arch et OpenSUSE. C'est lié ?
Merci pour l'info et encore merci pour l'aide efficace
Hors ligne