Утилита zenity – это средство создания диалоговых окон в режиме командной строки. Следует отметить, что на самом деле диалоговые окна создаются средствами Gtk+, поэтому в системе должны быть установлены соответствующие библиотеки. От аналогичных программ, таких как dialog и whiptail, zenity отличают более изощрённые средства реализации GUI-элементов. Загрузить актуальную версию этой утилиты можно на Web-сайте разработчиков [http://library.gnome.org/users/zenity/]. Также эту программу можно найти в репозиториях некоторых дистрибутивов Linux. Применение zenity для отдельных команд в интерактивном режиме не столь эффективно, как при написании сценариев. В сценариях командной оболочки часто требуется взаимодействие с пользователем, чтобы сообщить некую информацию, например, о возникновении "нестандартной" ситуации. Также требуется отображать информацию о состоянии выполнения операции, длящейся продолжительное время. Кроме этого, иногда сценарию необходимо получить некоторую информацию от пользователя: выбор варианта ответа на заданный вопрос, выбор файла из предложенного списка и т.д. Всё это можно организовать с помощью zenity. Необходимо уточнить, что после закрытия диалогового окна, zenity возвращает числовой код завершения операции: 0 - означает, что пользователь нажал в диалоговом окне кнопку "OK" или "Закрыть" (Сlose); 1 - означает, что пользователь нажал кнопку "Отмена" (Cancel) или воспользовался функциями (кнопками) окна, чтобы закрыть его; -1 - сообщает о том, что операция завершилась с ошибкой; 5 - диалоговое окно было закрыто после истечения интервала таймаута. Создание диалогового окна для вывода сообщений Чтобы начать использовать zenity на практике не требуется обладать особыми знаниями или умениями, достаточно просто познакомиться с различными опциями (ключами), позволяющими в полной мере использовать возможности этой программы. В zenity определены четыре типа диалоговых окон для вывода сообщений: ошибка (ключ --error); информация (ключ --info); вопрос (ключ --question); предупреждение (ключ --warning). Простое сообщение, изображенное на рисунке 1, определяется следующей командой: zenity --info --title="Сообщение от Gmail" \ --text="На Gmail получены новые почтовые сообщения" {{:снимок-сообщение_от_gmail.png?direct|}} Если требуется вывести текст сообщения в одну строку и без переносов, чтобы привлечь внимание к сообщению об ошибке, то можно воспользоваться ключом --no-wrap, как показано ниже: zenity --error \ --text="На сменном носителе не хватает места \ для резервного копирования файлов" \ --no-wrap {{:снимок-ошибка.png?direct|}} Создание диалогового окна для выбора варианта ответа Создание диалогового окна, в котором от пользователя требуется ответить на предложенный вопрос ("OK" или "Отмена"), лучше продемонстрировать на небольшом примере, приведённом в листинге 1. Листинг 1. Пример использования диалогового окна для выбора варианта ответа #!/bin/sh if [ -z "$*" ] then zenity --error --text="Не задан список удаляемых файлов" else zenity --question --title="Внимание: операция удаления" \ --text="Вы действительно хотите удалить перечисленные файлы?" \ --timeout=7 if [ $? -eq "0" ] then rm $* zenity --info --title="Операция выполнена" \ --text="Перечисленные файлы удалены" else zenity --warning --title="Операция отменена" \ --text="Перечисленные файлы не были удалены" fi fi В приведённом примере использованы все четыре типа диалоговых окон сообщений. Однако, так как в данном разделе рассматривается взаимодействие с пользователем по схеме "вопрос-ответ", то основное внимание следует уделить тому, как выглядит соответствующее диалоговое окно. {{:снимок-ошибка-2.png?direct|}}