Попросить пользовательское подтверждение прежде, чем выполнить сценарий?

Существует ли способ добраться, Пользовательское Подтверждение (Как Вы Sure-Yes/No), вводят диалоговое окно, когда я выполняю сценарий (двойным щелчком)? Я не имею в виду в Терминале, но Графическом поле подтверждения, чем-то вроде этого: enter image description here

(Я знаю, что изображение из окон, я не мог найти Linux одним),

8
задан 21 February 2016 в 06:19

4 ответа

Существует способ использовать zenity

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

enter image description here

, можно протестировать статус выхода той команды с $? переменная, что-то вроде этого: 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:/"
13
ответ дан 16 November 2019 в 06:44

Вы могли использовать xmessage в самом сценарии. Поместите что-то вроде этого после "хижины":

xmessage "Are you sure?"

Это отобразит графическое высказывание сообщения, "Вы уверены?" с "хорошо" кнопкой.

можно настроить xmessage, чтобы иметь больше чем одну кнопку и изменить то, что записано в ней. Можно также настроить действия, сделанные каждой кнопкой.

, Например,

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

Видят man xmessage для всех опций (существуют многие из них).

6
ответ дан 16 November 2019 в 06:44

Можно использовать yad, который похож на zenity на стероидах, поскольку это намного более настраивается. Можно установить его от Центра программного обеспечения в Ubuntu. В его наиболее канонической форме можно ввести

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

, и необходимо видеть это: screenshot 1

, Если хорошо был нажат, мы получаем код возврата 0, если Отмена была нажата, мы получаем код возврата 1.

было бы лучше поместить поле в центр и также скорректировать ширину его, использовать ведущую вкладку для расположения текста, "Вы уверены?" больше направо и также имейте его поверх остальных окон. Для этого нам нужно:

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

большинство переключателей сам объяснительное за исключением "\t" перед, "Вы уверены?" который просто добавляет пространство вкладки прежде, чем распечатать текст. Теперь мы должны видеть это: enter image description here

поле центрируется, поверх остальных окон и выглядит лучше. Для установки переменной для тестирования, для которого была нажата кнопка используйте:

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

В этом примере мы используем переменный $result, который будет установлен на 0, если хорошо был нажат или на 1, если Отмена была нажата.

Для справки с yad можно использовать man yad или yad --help-all, но я нашел, что практические примеры легче адаптировать. Существуют приблизительно здесь . yad намного более настраивается и поэтому более применим, чем zenity, по-моему.

2
ответ дан 16 November 2019 в 06:44

Вместо того, чтобы говорить Вам, как сделать это, я скажу Вам, что Вы не должны делать этого.

TL; DR - не изменяет Ваш сценарий. Вместо этого настройте свой файловый менеджер или фигуру, почему Ваши пользователи случайно выполняют его.

Править: Вы, кажется, рассматриваете свой сценарий как так или иначе особенный, как будто общие настройки не достаточно хороши, и для Вашего сценария нужно специальное подтверждение от пользователя. Двойной щелчок по нему является подтверждением. Если Вы находите, что Ваши пользователи выполняют его случайно затем, необходимо выяснить, почему они делают это и решают это вместо этого. Затем Ваша настоящая проблема не состоит в том, как потребовать подтверждения, а как препятствовать тому, чтобы Ваши пользователи выполнили его случайно.

От пути Вы выставляете свою проблему, кажется, что Вы ожидаете, что Ваша программа (сценарий) будет выполнена путем навигации туда, где файл, и затем нажатие на него из файлового менеджера. Думайте обо всех других программах в своей системе. Сколько Вы запускаете как этот? Вы перешли к /usr/local/bin когда стартовый Firefox? Конечно, Вы не делаете. Вы нажимаете на него из меню приложений. (тонкая настройка гнома является сценарием 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 .


Так как Вы дважды щелкаете по сценарию, это - задание Вашего файлового менеджера для подтверждения этого. Это не задание сценария, чтобы подтвердить, должно ли это работать. Возьмите это до крайности. Можно ли вообразить, насколько смешной случилось бы так каждый раз вызовом какой-либо программы, необходимо ли было подтвердить это?

Единственное время, когда программа должна попросить подтверждение, - когда это собирается сделать что-то возможно опасное и необратимый. Например, перезаписывая файл или обходя мусор. И обратите внимание, что даже эти примеры о том, чтобы заставлять программу сделать что-то определенное. Они не о запуске таких программ. Если программа только имеет целью, должен сделать такую опасную вещь, то она не должна спрашивать подтверждение также.

Действительно, Наутилус (файловый менеджер Gnome) уже по умолчанию попросит, чтобы Вы подтвердили, хотите ли Вы выполнить сценарий (или просто открыть его в текстовом редакторе).

Nautilus confirmation dialog

И конечно, это поведение настраивается, давая пользователю возможность выключения его (отметьте запись на Исполняемых Текстовых файлах).

Nautilus preferences menu - behaviour tab

Не добавляйте раздражающее диалоговое окно подтверждения к своему сценарию. Настройте свой файловый менеджер правильно. И позвольте своим пользователям сделать то же.

5
ответ дан 16 November 2019 в 06:44

Другие вопросы по тегам:

Похожие вопросы: