Выбрать главу

Таблица 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 Позволяют задать вопрос, на который пользователь может ответить "Да" или "Нет"