Попросити підтвердження користувача перед виконанням сценарію?


8

Чи є спосіб отримати підтвердження користувача (наприклад, чи впевнений ви так / ні) діалогове вікно типу "", коли я виконую сценарій (подвійним клацанням)? Я не маю на увазі термінал, а графічне поле підтвердження, щось подібне: введіть тут опис зображення

(Я знаю, що зображення з Windows, я не зміг знайти Linux)

Відповіді:


13

Є спосіб використання 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:/"

2
Вам не потрібні квадратні дужки. Просто зробіть if zenity...абоzenity... || exit
Кевін

Можна зробити так, але я віддаю перевагу більш «традиційному» стилю
Сергій Колодяжний

2
Мені просто здалося досить нерозумним перевірити стан виходу програми, подавши її статус виходу іншій програмі (або вбудованій оболонці), а потім перевірити стан виходу цієї програми.
Кевін

Це дещо нерозумно, але це стало силою звички
Сергій Колодяжний

6

Ви можете використовувати xmessageв самому сценарії. Помістіть щось подібне після "shebang":

xmessage "Are you sure?"

На екрані відобразиться графічне повідомлення "Ви впевнені?" з кнопкою «гаразд».

Ви можете налаштувати xmessageкілька кнопок і змінити те, що в ній написано. Ви також можете налаштувати дії, виконані кожною кнопкою.

Наприклад,

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

Перегляньте man xmessageвсі варіанти (їх дуже багато).


Дякуємо ... Це рішення також працює чудово. Просто зенітність відображає діалог, що виглядає краще. З точки зору функціональності обидва працюють ...
mayank budhwani

5

Замість того, щоб розповісти, як це зробити, я скажу тобі, що ти цього не повинен робити.

TL; DR - не змінюйте сценарій. Замість цього налаштуйте файловий менеджер або з’ясуйте, чому ваші користувачі випадково запускають його.

РЕДАКТУВАННЯ: Ви, здається, ставитеся до свого сценарію як до якогось особливого, як ніби загальні параметри недостатньо хороші, і ваш сценарій потребує спеціального підтвердження від користувача. Подвійне клацання на ньому - підтвердження. Якщо ви виявите, що ваші користувачі керують ним випадково, вам доведеться з’ясувати, чому вони це роблять, і вирішити це натомість. Тоді ваша справжня проблема полягає не в тому, як вимагати підтвердження, а в тому, як запобігти випадковому запуску користувачів.

З того, як ви розкриєте свою проблему, здається, що ви очікуєте, що ваша програма (скрипт) буде запущена, перейшовши до місця, де знаходиться файл, а потім натисніть на нього з диспетчера файлів. Подумайте про всі інші програми у вашій системі. Скільки ви починаєте так? Ви переходите до /usr/local/binзапуску firefox? Звичайно, ні. Ви натискаєте на неї з меню програм. (налаштування gnome - це сценарій python, можливо, це кращий приклад)

Сподіваємось, ви не вважатимете натисканням на нього з меню програм випадковістю. Отже, вашою проблемою стає те, як змусити вас з'являтись там сценарій замість використання файлового менеджера. Для цього виконайте такі дії:

  1. розміщуйте свій скрипт подалі від інших файлів, де користувач може випадково натиснути на нього (типовим місцем є встановлення /usr/local/bin/для системи або ~/.local/bin/для встановлення користувача)

  2. створити файл вводу для робочого столу (прочитати стандартні специфікації ). Ось мінімальний випадок:

    [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.

  3. Нарешті біжи update-desktop-database.


Оскільки ви двічі клацніть на сценарії, це завдання вашого менеджера файлів підтвердити це. Не завдання скрипту підтверджувати, чи повинен він працювати. Доведіть це до крайності. Чи можете ви уявити, наскільки смішним було б те, що кожного разу, коли ви телефонували будь-якій програмі, вам довелося це підтверджувати?

Єдиний час, коли програма повинна просити підтвердження, це коли вона збирається зробити щось можливо небезпечне та незворотне. Наприклад, перезапис файлу або обхід кошика. І зауважте, що навіть ці приклади стосуються того, щоб змусити програму зробити щось конкретне. Вони не про запуск таких програм. Якщо метою програми є лише зробити таку небезпечну справу, то вона також не повинна просити підтвердження.

Дійсно, Nautilus (файловий менеджер Gnome) вже за замовчуванням попросить вас підтвердити, чи хочете ви виконати сценарій (або просто відкрити його в текстовому редакторі).

Діалогове вікно підтвердження Nautilus

І звичайно, така поведінка може бути налаштована, що надає користувачеві можливість вимкнути її (запис примітки у виконуваних текстових файлах ).

Меню налаштувань Nautilus - вкладка поведінки

Тому не додайте дратівливий діалог підтвердження до свого сценарію. Налаштуйте файл-менеджер правильно. І нехай ваші користувачі роблять те саме.


1
Це насправді не є рішенням, оскільки цим не можна легко та безпечно ділитися з іншими.
Ісмаїл Мігель

Дякую ... Я знаю, як це зробити .. Але це додає підтвердження для всіх науковців ... Я хочу це для певного сценарію ...
Майка Будвані

@IsmaelMiguel, але в цьому вся суть відповіді. Це не слід ділитися. Є дві різні речі: дія програми та поведінка / досвід роботи системи. Ви не повинні зливати два.
carandraug

@IsmaelMiguel Ця відповідь вказує на антидіапазон того, що користувач хоче зробити. Це не дає рибі особі, яка має алергію, тому що у нього алергія.
Брайам

@mayankbudhwani ти все ще вирішуєш неправильну проблему. Чому саме цей сценарій особливий? Якщо ваші користувачі натискають на нього випадково, це вже інше питання. Я відредагував відповідь з іншим підходом.
carandraug

2

Ви можете використовувати yad, що схоже на зубність стероїдів, оскільки це набагато більш настроюється. Ви можете встановити його в Центрі програмного забезпечення в Ubuntu. У своїй найпростішій формі ви можете вводити текст

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

і ви повинні побачити це: скріншот 1

Якщо натиснуто ОК, ми отримаємо код повернення 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але я знайшов практичні приклади легше адаптуватися. Є деякі тут . Яд набагато настроюється і, отже, на мій погляд, більш корисний, ніж зен.


У випадку, якщо це допомагає комусь, я один раз раніше розміщував використання yad. Ви можете побачити його тут: askubuntu.com/questions/488350/…
Scooby-2,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.