Istnieje sposób użycia zenity
zenity --question --text "Are you sure?"
Można sprawdzić stan wyjścia tego polecenia z $?
zmienna, coś takiego: if [ $? -eq 1 ];then exit 1 ; fi
. 0
jest OK
, 1
jest anulowane. Ten konstrukt będzie działał dobrze, jeśli będziesz musiał później przetestować status wyjścia wyskakującego okienka, być może zapisz go $?
zaraz po wyjściu wyskakującego okienka do zmiennej. Jak omówiono w komentarzach, struktury takie jak poniżej również będą działać:
if zenity --question --text "Are you sure"
then
runSumeFunction
else
exit 1
fi
lub
zenity --question --text "Are you sure?" || echo "User isn't sure:/"
Sergiy Kolodyazhnyy
źródło
if zenity...
lubzenity... || exit
Możesz użyć
xmessage
w samym skrypcie. Umieść coś takiego po „shebang”:xmessage "Are you sure?"
Spowoduje to wyświetlenie graficznego komunikatu „Jesteś pewien?” z przyciskiem „OK”.
Możesz skonfigurować,
xmessage
aby mieć więcej niż jeden przycisk i zmienić to, co jest w nim napisane. Możesz także skonfigurować działania wykonywane za pomocą każdego przycisku.Na przykład,
Sprawdź
man xmessage
wszystkie opcje (jest ich wiele).źródło
Zamiast mówić ci, jak to zrobić, powiem ci, że nie powinieneś tego robić.
TL; DR - Nie zmieniaj skryptu. Zamiast tego skonfiguruj menedżera plików lub dowiedz się, dlaczego użytkownicy go przypadkowo uruchomili.
EDYCJA: Wydaje się, że traktujesz swój skrypt jako coś specjalnego, jakby ogólne ustawienia nie były wystarczająco dobre, a twój skrypt wymaga specjalnego potwierdzenia od użytkownika. Podwójne kliknięcie na nim jest potwierdzenie. Jeśli okaże się, że użytkownicy uruchamiają go przypadkowo, musisz dowiedzieć się, dlaczego to robią, i zamiast tego rozwiązać. Zatem twoim prawdziwym problemem nie jest to, jak wymagać potwierdzenia, ale jak zapobiec przypadkowemu uruchomieniu go przez użytkowników.
Ze sposobu, w jaki ujawniasz swój problem, wydaje się, że oczekujesz uruchomienia programu (skryptu), przechodząc do miejsca, w którym znajduje się plik, a następnie klikając go w menedżerze plików. Pomyśl o wszystkich innych programach w twoim systemie. Ilu tak zaczynasz? Czy nawigujesz
/usr/local/bin
po uruchomieniu Firefoksa? Oczywiście, że nie. Kliknij na niego z menu aplikacji. (gnome tweak to skrypt w języku Python, może to lepszy przykład)Mamy nadzieję, że nie pomyślisz o kliknięciu go w menu aplikacji jako wypadku. Twój problem polega na tym, jak sprawić, by skrypt pojawiał się tam zamiast używać menedżera plików. Aby to zrobić, wykonaj następujące czynności:
umieść skrypt z dala od innych plików, w których użytkownik może go przypadkowo kliknąć (typowe miejsce to
/usr/local/bin/
instalacja systemowa lub instalacja~/.local/bin/
użytkownika)utwórz plik Entry Desktop Entry (przeczytaj standardowe specyfikacje ). Oto minimalny przypadek:
i wepchnij to w
/usr/local/share/applications/your-script.xml
lub~/.local/share/your-script.xml
.Wreszcie biegnij
update-desktop-database
.Ponieważ dwukrotnie klikasz skrypt, potwierdzeniem tego jest menedżer plików. Skrypt nie musi potwierdzać, czy powinien zostać uruchomiony. Weź to do końca. Czy potrafisz sobie wyobrazić, jak absurdalne byłoby, gdybyś za każdym razem, gdy wywoływałeś jakiś program, musiał to potwierdzić?
Jedyny moment, w którym program powinien poprosić o potwierdzenie, to moment, w którym ma zamiar zrobić coś potencjalnie niebezpiecznego i nieodwracalnego. Na przykład nadpisanie pliku lub ominięcie kosza. I zauważ, że nawet te przykłady dotyczą zmuszenia programu do zrobienia czegoś konkretnego. Nie dotyczą uruchamiania takich programów. Jeśli jedynym celem programu jest zrobienie tak niebezpiecznej rzeczy, nie powinno to również wymagać potwierdzenia.
Rzeczywiście, Nautilus (menedżer plików Gnome) już domyślnie prosi o potwierdzenie, czy chcesz wykonać skrypt (lub po prostu otworzyć go w edytorze tekstu).
Oczywiście zachowanie to można konfigurować, co daje użytkownikowi możliwość wyłączenia go (wprowadzenie notatek w plikach tekstowych wykonywalnych ).
Nie dodawaj irytującego okna dialogowego potwierdzenia do skryptu. Skonfiguruj poprawnie menedżera plików. I pozwól swoim użytkownikom zrobić to samo.
źródło
Możesz użyć yad, który jest jak zenity na sterydach, ponieważ jest o wiele bardziej konfigurowalny. Możesz zainstalować go z Centrum oprogramowania w Ubuntu. W najbardziej podstawowej formie możesz pisać
yad --title=Question --image=dialog-question --text="Are you sure?"
i powinieneś to zobaczyć:
Jeśli naciśnięto OK, otrzymamy kod powrotu 0, jeśli naciśnięto Anuluj, otrzymamy kod powrotu 1.
Lepiej byłoby umieścić pole na środku, a także dostosować jego szerokość, użyć wiodącej zakładki, aby ustawić tekst „Jesteś pewien?” więcej po prawej, a także mieć go zawsze na wierzchu. W tym celu potrzebujemy:
yad --center --on-top --title=Question --image=dialog-question --text="\tAre you sure?" --width 200
Większość przełączników nie wymaga wyjaśnień, z wyjątkiem „\ t” przed „Jesteś pewien?” który po prostu dodaje spację przed wydrukowaniem tekstu. Teraz powinniśmy to zobaczyć:
Pudełko jest wyśrodkowane, zawsze na wierzchu i wygląda lepiej. Aby ustawić zmienną do testowania, dla którego naciśnięto przycisk, użyj:
yad --center --on-top --title=Question --image=dialog-question --text="\tAre you sure?" --width 200;result=$?;echo $result
W tym przykładzie używamy zmiennej $ result, która zostanie ustawiona na 0, jeśli naciśnięto OK lub na 1, jeśli naciśnięto Cancel.
Aby uzyskać pomoc Yad można użyć
man yad
alboyad --help-all
ale znalazłem praktyczne przykłady są łatwiejsze do adaptacji. Są tacy tutaj . yad jest znacznie bardziej konfigurowalny i dlatego moim zdaniem bardziej użyteczny niż zenity.źródło