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 12/06/2024, à 02: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, à 15:58)

Hors ligne

#2 Le 12/06/2024, à 04: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, à 12:44)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 12/06/2024, à 06: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, à 07: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.      smile

  • Cliquer sur le lien « Modifier » en bas à droite du message

  • Sélectionner le texte

  • Cliquer sur le <> de l'éditeur de message

Balisesmoko138.jpg

comme indiqué dans le : Retour utilisable de commande

Dernière modification par xubu1957 (Le 12/06/2024, à 17: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

Hors ligne

#5 Le 12/06/2024, à 12:45

Watael

Re : Script utilisant dialog

lynn a écrit :

Bonjour,

Il manque une quote avant Select all'

pas du tout. big_smile

merci. wink

Dernière modification par Watael (Le 12/06/2024, à 12:45)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#6 Le 15/06/2024, à 02: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, à 02:25)

Hors ligne

#7 Le 15/06/2024, à 06: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, à 06:20)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#8 Le 17/06/2024, à 16: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, à 12: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


2x pc - Ubuntu Mate dernière LTS - Intel i5, 16 Go - Dual boot Windows hors ligne

Hors ligne

#10 Le 18/06/2024, à 19: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