web-dev-qa-db-fra.com

Comment détecter si l'utilisateur a cliqué sur "Quitter" dans une liste zenity

Ceci est mon code:

while true; do
    choice=$(zenity --list --text "Users are listed below." --title "Result" --ok-label="Back to Menu" --cancel-label="Quit" --column=Users $(cut -d : -f 1 /etc/passwd))
    if [ "$choice" = "root" ]
        then    
            echo 'You have clicked on root'
    fi
    if [["$?" = "Quit"]]
        then
            exit
    fi
done

Comme vous le voyez, il affiche d’abord la liste des utilisateurs actifs du système. Je veux que mon petit programme imprime "Vous avez cliqué sur la racine" si l'utilisateur a cliqué sur "racine" et fait autre chose s'il/elle a cliqué sur les boutons (y compris "Quitter" et "Retour au menu").

Remarque: j'ai beaucoup cherché et je sais qu'il y a des tonnes de questions liées. Mais aucun d'entre eux n'a de réponse précise à ma question.

Edit: j'ai changé de code et le problème est que cela ne résonne en rien.

while true; do
choice=$(zenity --list --text "Users are listed below." --title "Result" --ok-label="Back to Menu" --cancel-label="Quit" --column=Users $(cut -d : -f 1 /etc/passwd))

if [ "$?" != 0 ]
then
    exit
fi

if [ "$choice" = "root" ]
then    
    echo 'You have clicked on root'
fi
done

Je ne sais pas si c'est lié ou pas. Mais j'utilise Ubuntu 18.04

Edit 2: J'ai exécuté mon script en utilisant bash -x et le résultat est ici .

1

$? est l'état de sortie, qui est un entier et ne peut jamais être "Quitter". Mais, si l'utilisateur a cliqué sur "Quitter", zenity se fermera avec le statut 1 et 0 s'il a cliqué sur le bouton OK.

$ choice=$(zenity --list --text "Users are listed below." --title "Result" --ok-label="Back to Menu" --cancel-label="Quit" --column=Users $(cut -d : -f 1 /etc/passwd))
# clicked Quit
$ echo $?
1

Alors tu pourrais faire:

choice=$(zenity --list --text "Users are listed below." --title "Result" --ok-label="Back to Menu" --cancel-label="Quit" --column=Users $(cut -d : -f 1 /etc/passwd))

if [ "$?" != 0 ]
then
    exit
fi

if [ "$choice" = "root" ]
then    
    echo 'You have clicked on root'
fi

Il est préférable de comparer avec 0, car d'autres défaillances peuvent entraîner un état de sortie autre que 0 ou 1.

2
muru