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 .
$?
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.