Відповіді:
Є спосіб використання zenity
zenity --question --text "Are you sure?"
Ви можете перевірити статус завершення цієї команди з $?перемінним, що - щось на зразок цього: if [ $? -eq 1 ];then exit 1 ; fi. 0є OK, 1скасовується. Ця конструкція буде добре працювати, якщо вам потрібно пізніше перевірити стан виходу спливаючого вікна, можливо, зберігати $?відразу після виходу спливаючого вікна на змінну. Як обговорюється в коментарях, такі структури, як нижче, також будуть працювати:
if zenity --question --text "Are you sure"
then
runSumeFunction
else
exit 1
fi
або
zenity --question --text "Are you sure?" || echo "User isn't sure:/"
Ви можете використовувати xmessageв самому сценарії. Помістіть щось подібне після "shebang":
xmessage "Are you sure?"
На екрані відобразиться графічне повідомлення "Ви впевнені?" з кнопкою «гаразд».
Ви можете налаштувати xmessageкілька кнопок і змінити те, що в ній написано. Ви також можете налаштувати дії, виконані кожною кнопкою.
Наприклад,
xmessage -buttons ok:0,cancel:1 "Are you sure?"
Перегляньте man xmessageвсі варіанти (їх дуже багато).
Замість того, щоб розповісти, як це зробити, я скажу тобі, що ти цього не повинен робити.
TL; DR - не змінюйте сценарій. Замість цього налаштуйте файловий менеджер або з’ясуйте, чому ваші користувачі випадково запускають його.
РЕДАКТУВАННЯ: Ви, здається, ставитеся до свого сценарію як до якогось особливого, як ніби загальні параметри недостатньо хороші, і ваш сценарій потребує спеціального підтвердження від користувача. Подвійне клацання на ньому - підтвердження. Якщо ви виявите, що ваші користувачі керують ним випадково, вам доведеться з’ясувати, чому вони це роблять, і вирішити це натомість. Тоді ваша справжня проблема полягає не в тому, як вимагати підтвердження, а в тому, як запобігти випадковому запуску користувачів.
З того, як ви розкриєте свою проблему, здається, що ви очікуєте, що ваша програма (скрипт) буде запущена, перейшовши до місця, де знаходиться файл, а потім натисніть на нього з диспетчера файлів. Подумайте про всі інші програми у вашій системі. Скільки ви починаєте так? Ви переходите до /usr/local/binзапуску firefox? Звичайно, ні. Ви натискаєте на неї з меню програм. (налаштування gnome - це сценарій python, можливо, це кращий приклад)
Сподіваємось, ви не вважатимете натисканням на нього з меню програм випадковістю. Отже, вашою проблемою стає те, як змусити вас з'являтись там сценарій замість використання файлового менеджера. Для цього виконайте такі дії:
розміщуйте свій скрипт подалі від інших файлів, де користувач може випадково натиснути на нього (типовим місцем є встановлення /usr/local/bin/для системи або ~/.local/bin/для встановлення користувача)
створити файл вводу для робочого столу (прочитати стандартні специфікації ). Ось мінімальний випадок:
[Desktop Entry]
Name=Your script name
Exec=path/for/your/script
Icon=path/for/your/icon/can/be/svg
Terminal=false
Type=Application
і засунути його в /usr/local/share/applications/your-script.xmlабо ~/.local/share/your-script.xml.
Нарешті біжи update-desktop-database.
Оскільки ви двічі клацніть на сценарії, це завдання вашого менеджера файлів підтвердити це. Не завдання скрипту підтверджувати, чи повинен він працювати. Доведіть це до крайності. Чи можете ви уявити, наскільки смішним було б те, що кожного разу, коли ви телефонували будь-якій програмі, вам довелося це підтверджувати?
Єдиний час, коли програма повинна просити підтвердження, це коли вона збирається зробити щось можливо небезпечне та незворотне. Наприклад, перезапис файлу або обхід кошика. І зауважте, що навіть ці приклади стосуються того, щоб змусити програму зробити щось конкретне. Вони не про запуск таких програм. Якщо метою програми є лише зробити таку небезпечну справу, то вона також не повинна просити підтвердження.
Дійсно, Nautilus (файловий менеджер Gnome) вже за замовчуванням попросить вас підтвердити, чи хочете ви виконати сценарій (або просто відкрити його в текстовому редакторі).
І звичайно, така поведінка може бути налаштована, що надає користувачеві можливість вимкнути її (запис примітки у виконуваних текстових файлах ).
Тому не додайте дратівливий діалог підтвердження до свого сценарію. Налаштуйте файл-менеджер правильно. І нехай ваші користувачі роблять те саме.
Ви можете використовувати yad, що схоже на зубність стероїдів, оскільки це набагато більш настроюється. Ви можете встановити його в Центрі програмного забезпечення в Ubuntu. У своїй найпростішій формі ви можете вводити текст
yad --title=Question --image=dialog-question --text="Are you sure?"
Якщо натиснуто ОК, ми отримаємо код повернення 0, якщо натиснути Скасувати, ми отримаємо код повернення 1.
Краще було б поставити поле в центр, а також відрегулювати його ширину, скористатися провідною вкладкою, щоб розмістити текст "Ви впевнені?" більше праворуч, а також завжди вгорі. Для цього нам потрібно:
yad --center --on-top --title=Question --image=dialog-question --text="\tAre you sure?" --width 200
Більшість комутаторів не пояснюють, за винятком "\ t" перед пунктом "Ви впевнені?" що просто додає простір на вкладці перед друком тексту. Тепер ми повинні побачити це:
Коробка по центру, завжди зверху і виглядає краще. Щоб встановити змінну для перевірки, на яку кнопку було натиснуто, використовуйте:
yad --center --on-top --title=Question --image=dialog-question --text="\tAre you sure?" --width 200;result=$?;echo $result
У цьому прикладі ми використовуємо змінну $ результат, яка буде встановлена на 0, якщо натиснути кнопку OK, або 1, якщо натиснути кнопку Скасувати.
За допомогою Yad ви можете використовувати man yadабо , yad --help-allале я знайшов практичні приклади легше адаптуватися. Є деякі тут . Яд набагато настроюється і, отже, на мій погляд, більш корисний, ніж зен.
if zenity...абоzenity... || exit