Vor dem Ausführen eines Skripts eine Benutzerbestätigung anfordern?

8

Gibt es eine Möglichkeit, das Dialogfenster "Benutzerbestätigung (Wie sicher-Ja / Nein)" zu erhalten, wenn ich ein Skript (per Doppelklick) ausführe? Ich meine nicht im Terminal, sondern eine grafische Bestätigungsbox, etwa so:

(Ich weiß, dass das Bild von Windows ist, ich konnte kein Linux finden)

    
mayank budhwani 20.02.2016, 15:24

4 Antworten

13

Es gibt einen Weg mit zenity

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

Sie können den Beendigungsstatus dieses Befehls mit $? Variable testen, etwa so: if [ $? -eq 1 ];then exit 1 ; fi . 0 ist OK , 1 ist abbrechen. Dieses Konstrukt funktioniert gut, wenn Sie den Exit-Status des Popups später testen müssen, und vielleicht $? speichern, direkt nachdem das Popup in eine Variable übergeht. Wie in den Kommentaren besprochen, funktionieren auch Strukturen wie unten:

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

oder

 zenity --question --text "Are you sure?" || echo "User isn't sure:/"
    
Sergiy Kolodyazhnyy 20.02.2016, 15:35
6

Sie könnten xmessage im Skript selbst verwenden. Setze so etwas nach dem "Shebang":

xmessage "Are you sure?"

Dies wird eine grafische Nachricht mit dem Text "Sind Sie sicher?" mit einem "OK" Knopf.

Sie können xmessage so konfigurieren, dass mehr als eine Schaltfläche vorhanden ist, und ändern, was darin geschrieben ist. Sie können auch die Aktionen für jede Schaltfläche konfigurieren.

Zum Beispiel

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

Siehe man xmessage für alle Optionen (es gibt viele davon).

    
Eduardo Cola 20.02.2016 15:30
5

Anstatt dir zu sagen, wie es geht, werde ich dir sagen, dass du das nicht tun solltest.

TL; DR - Ändern Sie Ihr Skript nicht. Konfigurieren Sie stattdessen Ihren Dateimanager oder finden Sie heraus, warum Ihre Benutzer ihn versehentlich ausführen.

BEARBEITEN: Sie scheinen Ihr Skript als etwas Besonderes zu behandeln, als ob die allgemeinen Einstellungen nicht gut genug wären und Ihr Skript eine spezielle Bestätigung vom Benutzer benötigt. Doppelklick darauf ist die Bestätigung. Wenn Sie feststellen, dass Ihre Benutzer es versehentlich ausführen, müssen Sie herausfinden, warum sie es tun, und das stattdessen lösen. Dann ist Ihr wirkliches Problem nicht , wie Sie eine Bestätigung benötigen, sondern wie Sie verhindern können, dass Ihre Benutzer sie versehentlich ausführen.

Aufgrund der Art und Weise, wie Sie Ihr Problem offen legen, scheint es, dass Sie erwarten, dass Ihr Programm (Skript) ausgeführt wird, indem Sie zu der Datei navigieren und dann im Dateimanager darauf klicken. Denken Sie an alle anderen Programme in Ihrem System. Wie viele fängst du so an? Navigieren Sie beim Starten von Firefox zu /usr/local/bin ? Natürlich nicht. Sie klicken darauf im Anwendungsmenü. (Gnome Tweak ist vielleicht ein Python-Skript, das ist ein besseres Beispiel)

Sie werden hoffentlich nicht daran denken, aus dem Anwendungsmenü auf einen Unfall zu klicken. Ihr Problem besteht also darin, dass Sie das Skript dort erscheinen lassen, anstatt den Dateimanager zu verwenden. Um dies zu tun, tun Sie Folgendes:

  1. Platzieren Sie Ihr Skript entfernt von den anderen Dateien, in denen der Benutzer versehentlich darauf klicken kann (der typische Ort ist /usr/local/bin/ für eine systemweite Installation oder ~/.local/bin/ für eine Benutzerinstallation)

  2. Erstellen Sie eine Desktop Entry-Datei (lesen Sie die Standardspezifikationen ). Hier ist ein minimaler Fall:

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

    und schieben Sie es in /usr/local/share/applications/your-script.xml oder ~/.local/share/your-script.xml .

  3. Führen Sie schließlich update-desktop-database .

  4. aus

Da Sie auf das Skript doppelklicken, ist es die Aufgabe Ihres Dateimanagers, dies zu bestätigen. Es ist nicht Aufgabe des Skripts zu bestätigen, ob es ausgeführt werden soll. Nimm das auf die Spitze. Kannst du dir vorstellen, wie lächerlich es ist, dass jedes Mal, wenn du irgendein Programm anrufst, du es bestätigen musstest?

Der einzige Zeitpunkt, an dem ein Programm nach Bestätigung fragen sollte, ist, wann es etwas gefährlich und irreversibel machen soll. Überschreiben Sie beispielsweise eine Datei oder umgehen Sie den Papierkorb. Und beachte, dass selbst diese Beispiele dazu dienen, dass ein Programm etwas Bestimmtes macht. Es geht nicht darum, solche Programme zu starten. Wenn ein Programm nur dazu dient, solch eine gefährliche Sache zu tun, dann sollte es auch keine Bestätigung geben.

Tatsächlich wird Nautilus (Gnome-Dateimanager) Sie bereits standardmäßig dazu auffordern zu bestätigen, ob Sie ein Skript ausführen wollen (oder es einfach in einem Texteditor öffnen).

Und natürlich ist dieses Verhalten konfigurierbar und gibt dem Benutzer die Möglichkeit, es auszuschalten (beachten Sie den Eintrag in Ausführbare Textdateien ).

Fügen Sie Ihrem Skript also keinen ärgerlichen Bestätigungsdialog hinzu. Konfigurieren Sie Ihren Dateimanager korrekt. Und lassen Sie Ihre Benutzer das gleiche tun.

    
carandraug 20.02.2016 22:16
2

Sie können yad verwenden, das ist wie Zenity auf Steroiden, da es viel konfigurierbarer ist. Sie können es über das Software Center in Ubuntu installieren. In der einfachsten Form können Sie

eingeben

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

und du solltest das sehen:

Wenn OK gedrückt wurde, erhalten wir einen Rückgabecode von 0, wenn Abbrechen gedrückt wurde, erhalten wir einen Rückgabecode von 1.

Es wäre besser, die Schachtel in die Mitte zu legen und auch die Breite zu ändern. Verwenden Sie eine führende Registerkarte, um den Text "Sind Sie sicher?" mehr rechts und auch immer oben drauf. Dafür brauchen wir:

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

Die meisten Schalter sind selbsterklärend mit Ausnahme des "\ t" vor dem "Sind Sie sicher?" Das fügt einfach einen Tabulatorraum hinzu, bevor der Text gedruckt wird. Jetzt sollten wir folgendes sehen:

Die Box ist zentriert, immer oben und sieht besser aus. Um eine Variable festzulegen, um zu testen, welche Taste gedrückt wurde, verwenden Sie:

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

In diesem Beispiel verwenden wir die Variable $ result, die auf 0 gesetzt wird, wenn OK gedrückt wurde, oder auf 1, wenn Abbrechen gedrückt wurde.

Für Hilfe mit yad können Sie man yad oder yad --help-all verwenden, aber ich fand, dass praktische Beispiele leichter anzupassen sind. Es gibt einige hier . Yad ist meiner Meinung nach viel konfigurierbarer und daher nützlicher als Zenity.

    
Scooby-2 08.03.2016 01:53

Tags und Links