Таблица 2.19
| Опция командной строки | Опция команды set |
Описание |
|---|---|---|
sh -n <сценарий>
|
set -о noexec set -n
|
Только проверяет синтаксические ошибки; не выполняет команды |
sh -v <сценарий>
|
set -о verbose set -v
|
Выводит на экран команды перед их выполнением |
sh -х <сценарий>
|
set -о xtrace set -x
|
Выводит на экран команды после обработки командной строки |
sh -u <сценарий>
|
set -o nounset set -u
|
Выдает сообщение об ошибке при использовании неопределенной переменной |
Вы можете установить опции с помощью флагов -о и сбросить их с помощью флагов +о подобным же образом в сокращенных версиях. Получить простое отслеживание выполнения можно, используя опцию xtrace. Для начала вы можете применить опцию командной строки, но для более тщательной отладки следует поместить опции xtrace (задавая выполнение и сброс отслеживания выполнения) внутрь сценария, в тот фрагмент кода, который создает проблему. Отслеживание выполнения заставляет командную оболочку перед выполнением каждой строки сценария выводить на экран эту строку и подставлять в нее значения используемых переменных.
Для установки опции xtrace используйте следующую команду:
set -о xtrace
Для того чтобы снова отключить эту опцию, применяйте следующую команду:
set +о xtrace
Уровень выполняемых подстановок задается (по умолчанию) количеством знаков + в начале каждой строки. Вы можете заменить знак + на что-то более осмысленное, определив переменную командной оболочки PS4 в вашем файле конфигурации оболочки.
В командной оболочке также можно выяснить состояние программы после ее завершения, перехватив сигнал EXIT с помощью строки, подобной приведенной далее и помещенной в начале вашего сценария:
trap 'echo Exiting: critical variable = $critical_variable' EXIT
По направлению к графическому режиму — утилита dialog
Прежде чем мы закончим обсуждение сценариев командной оболочки, обратимся к еще одному средству, которое, хотя, строго говоря, и не является частью оболочки, в основном полезно применять именно в программах командной оболочки.
Если вы знаете, что ваш сценарий придется выполнять только с консоли ОС Linux, существует довольно изящный способ оживить сценарий, применяя служебную команду dialog. Она использует средства псевдографики текстового режима и цвет, но при этом выглядит привлекательно.
В некоторых дистрибутивах команда dialog по умолчанию не устанавливается; например, в Ubuntu вам, возможно, придется добавить совместно поддерживаемые репозитарии для поиска готовой версии. В других дистрибутивах вы можете найти уже установленный альтернативный вариант, gdialog. Он очень похож, но рассчитан на пользовательский интерфейс GNOME, применяемый для отображения диалоговых окон команды. В этом случае вы получите настоящий графический интерфейс. Как правило, в любой программе, использующей команду dialog, можно заменить все вызовы этой команды на gdialog, и вы получите графическую версию вашей программы. В конце этого раздела мы покажем пример программы, использующей команду gdialog.
Общая концепция утилиты dialog проста — одна программа с множеством параметров и опций, позволяющих отображать различные типы графических окон, начиная с простых окон с кнопками типа Yes/No (Да/Нет) и заканчивая окнами ввода и даже выбором пункта меню. Утилита обычно возвращает результат, когда пользователь выполнил какой-либо ввод, и результат может быть получен или из статуса завершения, или, если вводился текст, извлечением стандартного потока ошибок.
Прежде чем переходить к подробностям, давайте рассмотрим очень простой пример применения утилиты dialog. Вы можете вызывать ее непосредственно из командной строки, что прекрасно с точки зрения создания прототипов. Поэтому создадим простое окно сообщений для отображения традиционной первой программы:
dialog --msgbox "Hello World" 9 18
На экране появится графическое информационное окно, дополненное кнопкой OK (рис. 2.3).
Рис. 2.3
Теперь, когда вы убедились в простоте утилиты dialog, давайте поподробнее рассмотрим ее функциональные возможности. Основные типы диалоговых окон, которые вы можете создавать, перечислены в табл. 2.20.
Таблица 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
|
Позволяют задать вопрос, на который пользователь может ответить "Да" или "Нет" |