Основы программирования в Linux
Вы можете установить опции с помощью флагов
и сбросить их с помощью флагов-оподобным же образом в сокращенных версиях. Получить простое отслеживание выполнения можно, используя опцию+о. Для начала вы можете применить опцию командной строки, но для более тщательной отладки следует поместить опцииxtrace(задавая выполнение и сброс отслеживания выполнения) внутрь сценария, в тот фрагмент кода, который создает проблему. Отслеживание выполнения заставляет командную оболочку перед выполнением каждой строки сценария выводить на экран эту строку и подставлять в нее значения используемых переменных.xtraceДля установки опции
используйте следующую команду:xtraceset -о xtraceДля того чтобы снова отключить эту опцию, применяйте следующую команду:
set +о xtraceУровень выполняемых подстановок задается (по умолчанию) количеством знаков
в начале каждой строки. Вы можете заменить знак+на что-то более осмысленное, определив переменную командной оболочки+в вашем файле конфигурации оболочки.PS4В командной оболочке также можно выяснить состояние программы после ее завершения, перехватив сигнал
с помощью строки, подобной приведенной далее и помещенной в начале вашего сценария:EXITtrap 'echo Exiting: critical variable = $critical_variable' EXITПо направлению к графическому режиму — утилита dialog
Прежде чем мы закончим обсуждение сценариев командной оболочки, обратимся к еще одному средству, которое, хотя, строго говоря, и не является частью оболочки, в основном полезно применять именно в программах командной оболочки.
Если вы знаете, что ваш сценарий придется выполнять только с консоли ОС Linux, существует довольно изящный способ оживить сценарий, применяя служебную команду
. Она использует средства псевдографики текстового режима и цвет, но при этом выглядит привлекательно.dialogПримечаниеВ некоторых дистрибутивах команда
по умолчанию не устанавливается; например, в Ubuntu вам, возможно, придется добавить совместно поддерживаемые репозитарии для поиска готовой версии. В других дистрибутивах вы можете найти уже установленный альтернативный вариант,dialog. Он очень похож, но рассчитан на пользовательский интерфейс GNOME, применяемый для отображения диалоговых окон команды. В этом случае вы получите настоящий графический интерфейс. Как правило, в любой программе, использующей командуgdialog, можно заменить все вызовы этой команды наdialog, и вы получите графическую версию вашей программы. В конце этого раздела мы покажем пример программы, использующей командуgdialog.gdialogОбщая концепция утилиты
проста — одна программа с множеством параметров и опций, позволяющих отображать различные типы графических окон, начиная с простых окон с кнопками типа Yes/No (Да/Нет) и заканчивая окнами ввода и даже выбором пункта меню. Утилита обычно возвращает результат, когда пользователь выполнил какой-либо ввод, и результат может быть получен или из статуса завершения, или, если вводился текст, извлечением стандартного потока ошибок.dialogПрежде чем переходить к подробностям, давайте рассмотрим очень простой пример применения утилиты
. Вы можете вызывать ее непосредственно из командной строки, что прекрасно с точки зрения создания прототипов. Поэтому создадим простое окно сообщений для отображения традиционной первой программы:dialogdialog --msgbox "Hello World" 9 18На экране появится графическое информационное окно, дополненное кнопкой OK (рис. 2.3).
Рис. 2.3
Теперь, когда вы убедились в простоте утилиты
, давайте поподробнее рассмотрим ее функциональные возможности. Основные типы диалоговых окон, которые вы можете создавать, перечислены в табл. 2.20.dialogТаблица 2.20
Тип диалогового окна Опция, применяемая для создания окна этого типа Назначение окна Окна с флажками (Check boxes) --checklistПозволяет отображать список флажков, каждый из которых можно установить или сбросить Информационные окна (Info boxes) --infoboxПростое немедленное отображение в окне, без очистки экрана, возвращаемых данных Окна ввода (Input boxes) --inputboxПозволяет пользователю вводить в окно текст Окна меню (Menu boxes) --menuПозволяет пользователю выбрать один пункт из списка Окна сообщений (Message boxes) --msgboxОтображает сообщения для пользователей и снабжено кнопкой OK, которую они должны нажать для продолжения Окна с переключателями (Radio selection boxes) --radiolistПозволяет пользователю выбрать один переключатель из списка Текстовые окна (Text boxes) --textboxПозволяют отображать содержимое файла в окне с прокруткой Диалоговые окна Да/Нет (Yes/No boxes) --yesnoПозволяют задать вопрос, на который пользователь может ответить "Да" или "Нет" Доступны также и некоторые дополнительные типы диалоговых окон (например, индикатор процесса или окно ввода пароля). Если вы хотите узнать побольше о необычных типах диалоговых окон, как всегда подробную информацию можно найти на страницах интерактивного справочного руководства.
Для получения вывода из диалогового окна любого типа, допускающего текстовый ввод или выбор, вы должны перехватить стандартный поток ошибок, как правило, направляя его во временный файл, который вы сможете обработать позже. Для получения ответа на вопросы типа "Да"/"Нет", просто проверьте код завершения, который, как и во всех соблюдающих приличия программах, в случае успеха возвращает 0 (т. е. выбор ответа "Да" (Yes)) и 1 в остальных случаях.
У всех типов диалоговых окон есть дополнительные управляющие параметры, такие как размер и контур отображаемого окна. В табл. 2.21 перечислены разные параметры, необходимые окнам каждого типа, а затем демонстрируется использование некоторых из них в командной строке. В заключение вы увидите простой пример, объединяющий в одной программе несколько диалоговых окон разных типов.
