Demander la confirmation de l'utilisateur avant d'exécuter un script?


8

Existe-t-il un moyen d'obtenir la boîte de dialogue de type Confirmation utilisateur (comme êtes-vous sûr oui / non) lorsque j'exécute un script (en double-cliquant)? Je ne veux pas dire dans Terminal, mais une boîte de confirmation graphique, quelque chose comme ceci: entrez la description de l'image ici

(Je sais que l'image provient de Windows, je n'ai pas pu trouver une image Linux)

Réponses:


13

Il y a un moyen d'utiliser zenity

zenity --question --text "Are you sure?"

entrez la description de l'image ici

Vous pouvez tester l'état de sortie de cette commande avec la $?variable, quelque chose comme ceci: if [ $? -eq 1 ];then exit 1 ; fi. 0est OK, 1est annuler. Cette construction fonctionnera bien si vous avez besoin de tester le statut de sortie du popup plus tard, peut-être le stocker $?juste après la sortie du popup vers une variable. Comme indiqué dans les commentaires, les structures comme ci-dessous fonctionneront également:

if zenity --question --text "Are you sure" 
then
     runSumeFunction
else
     exit 1
 fi

ou

 zenity --question --text "Are you sure?" || echo "User isn't sure:/"

2
Vous n'avez pas besoin de crochets. Faites if zenity...ouzenity... || exit
Kevin

Peut être fait de cette façon, mais je préfère un style plus "traditionnel"
Sergiy Kolodyazhnyy

2
Il m'a semblé plutôt idiot de tester l'état de sortie d'un programme en ... alimentant son état de sortie à un autre programme (ou shell intégré) et en testant ensuite l'état de sortie de celui-ci.
Kevin

C'est un peu idiot, mais c'est devenu une force d'habitude
Sergiy Kolodyazhnyy

6

Vous pouvez utiliser xmessagedans le script lui-même. Mettez quelque chose comme ça après le "shebang":

xmessage "Are you sure?"

Cela affichera un message graphique disant "Êtes-vous sûr?" avec un bouton "ok".

Vous pouvez configurer xmessageplusieurs boutons et modifier ce qui y est écrit. Vous pouvez également configurer les actions effectuées par chaque bouton.

Par exemple,

xmessage -buttons ok:0,cancel:1 "Are you sure?"  

Voir man xmessagepour toutes les options (il y en a beaucoup).


Merci ... Cette solution fonctionne également très bien .. C'est juste que la zénité affiche une meilleure boîte de dialogue .. En termes de fonctionnalité, les deux fonctionnent ...
mayank budhwani

5

Au lieu de vous dire comment faire, je vous dirai que vous ne devriez pas faire ça.

TL; DR - Ne changez pas votre script. Configurez plutôt votre gestionnaire de fichiers ou découvrez pourquoi vos utilisateurs l'exécutent accidentellement.

EDIT: Vous semblez traiter votre script comme quelque chose de spécial, comme si les paramètres généraux n'étaient pas assez bons et que votre script avait besoin d'une confirmation spéciale de l'utilisateur. Double-cliquer dessus est la confirmation. Si vous constatez que vos utilisateurs l'exécutent par accident, vous devez comprendre pourquoi ils le font et le résoudre à la place. Ensuite, votre vrai problème n'est pas de savoir comment exiger une confirmation mais comment empêcher vos utilisateurs de l'exécuter accidentellement.

D'après la façon dont vous exposez votre problème, il semble que vous vous attendiez à ce que votre programme (script) soit exécuté en naviguant jusqu'à l'emplacement du fichier, puis en cliquant dessus depuis le gestionnaire de fichiers. Pensez à tous les autres programmes de votre système. Combien commencez-vous comme ça? Naviguez-vous au /usr/local/bindémarrage de Firefox? Bien sûr que non. Vous cliquez dessus dans le menu des applications. (gnome tweak est un script python, c'est peut-être un meilleur exemple)

J'espère que vous ne considérerez pas que cliquer dessus dans le menu des applications soit un accident. Votre problème est donc de savoir comment faire apparaître votre script au lieu d'utiliser le gestionnaire de fichiers. Pour ce faire, vous procédez comme suit:

  1. placez votre script loin des autres fichiers où l'utilisateur peut cliquer dessus par accident (l'endroit typique est /usr/local/bin/pour une installation à l'échelle du système ou ~/.local/bin/pour une installation utilisateur)

  2. créer un fichier d'entrée de bureau (lire les spécifications standard ). Voici un cas minimal:

    [Desktop Entry]
    Name=Your script name
    Exec=path/for/your/script
    Icon=path/for/your/icon/can/be/svg
    Terminal=false
    Type=Application

    et le pousser dans /usr/local/share/applications/your-script.xmlou ~/.local/share/your-script.xml.

  3. Enfin, exécutez update-desktop-database.


Puisque vous double-cliquez sur le script, c'est le travail de votre gestionnaire de fichiers de le confirmer. Il n'appartient pas au script de confirmer s'il doit s'exécuter. Poussez cela à l'extrême. Pouvez-vous imaginer à quel point il serait ridicule que chaque fois que vous appeliez un programme, vous deviez le confirmer?

La seule fois où un programme doit demander une confirmation, c'est quand il est sur le point de faire quelque chose de dangereux et irréversible. Par exemple, remplacer un fichier ou contourner la corbeille. Et notez que même ces exemples visent à faire un programme faire quelque chose de spécifique. Il ne s'agit pas de lancer de tels programmes. Si un programme n'a pour but que de faire une chose aussi dangereuse, il ne devrait pas non plus demander de confirmation.

En effet, Nautilus (gestionnaire de fichiers Gnome) vous demandera déjà par défaut de confirmer si vous souhaitez exécuter un script (ou simplement l'ouvrir dans un éditeur de texte).

Boîte de dialogue de confirmation Nautilus

Et bien sûr, ce comportement est configurable, donnant à l'utilisateur la possibilité de le désactiver (entrée de note sur les fichiers texte exécutables ).

Menu des préférences Nautilus - onglet comportement

N'ajoutez donc pas une boîte de dialogue de confirmation ennuyeuse à votre script. Configurez correctement votre gestionnaire de fichiers. Et laissez vos utilisateurs faire de même.


1
Ce n'est pas vraiment une solution, car cela ne peut pas être partagé facilement et en toute sécurité avec les autres.
Ismael Miguel

Merci ... Je sais comment faire ça .. Mais cela ajoute une confirmation à tous les scipts ... Je le veux pour un script particulier ...
mayank budhwani

@IsmaelMiguel mais c'est tout l'intérêt de la réponse. Elle ne doit pas être partagée. Il y a deux choses différentes, l'action du programme et le comportement / l'expérience du système. Vous ne devez pas fusionner les deux.
carandraug

@IsmaelMiguel cette réponse souligne l'anti-modèle de ce que l'utilisateur veut faire. Il ne donne pas le poisson au demandeur parce qu'il est allergique.
Braiam

@mayankbudhwani vous êtes toujours en train de résoudre le mauvais problème. Pourquoi ce script particulier est-il spécial? Si vos utilisateurs cliquent dessus par accident, c'est un problème différent. J'ai édité la réponse avec une autre approche.
carandraug

2

Vous pouvez utiliser yad, qui est comme la zénité sur les stéroïdes car il est beaucoup plus configurable. Vous pouvez l'installer à partir du Centre logiciel dans Ubuntu. Dans sa forme la plus simple, vous pouvez taper

yad --title=Question --image=dialog-question --text="Are you sure?"

et vous devriez voir ceci: capture d'écran 1

Si OK a été enfoncé, nous obtenons un code retour de 0, si Annuler a été enfoncé, nous obtenons un code retour de 1.

Il serait préférable de placer la boîte au centre et d'ajuster également la largeur de celle-ci, utilisez un onglet de tête pour positionner le texte "Êtes-vous sûr?" plus à droite et aussi toujours en haut. Pour cela, nous avons besoin de:

yad --center --on-top --title=Question --image=dialog-question --text="\tAre you sure?" --width 200

La plupart des commutateurs sont explicites à l'exception du "\ t" avant le "Êtes-vous sûr?" ce qui ajoute simplement un espace de tabulation avant d'imprimer le texte. Maintenant, nous devrions voir ceci:entrez la description de l'image ici

La boîte est centrée, toujours sur le dessus et a fière allure. Pour définir une variable pour tester le bouton sur lequel vous avez appuyé, utilisez:

yad --center --on-top --title=Question --image=dialog-question --text="\tAre you sure?" --width 200;result=$?;echo $result

Dans cet exemple, nous utilisons la variable $ result qui sera définie sur 0 si vous avez appuyé sur OK ou sur 1 si vous avez appuyé sur Annuler.

Pour obtenir de l'aide avec yad, vous pouvez utiliser man yadou yad --help-allmais j'ai trouvé que les exemples pratiques sont plus faciles à adapter. Il y en a ici . yad est beaucoup plus configurable et donc plus utilisable que zenity à mon avis.


Au cas où cela aiderait quelqu'un, j'ai publié une fois l'utilisation de yad. Vous pouvez le voir ici: askubuntu.com/questions/488350/…
Scooby-2
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.