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