next up previous contents
Next: Переменная окружения PATH. Up: Настройка оболочки Previous: Скрипты командной оболочки

Переменные оболочки и окружение

      Подобно большинству языков программирования, командные оболочки позволяют создавать переменные (variables). Переменная -- это просто некоторые данные, которым дано имя.

Оболочка tcsh, а также другие оболочки с синтаксисом, основанным на языке C, для создания переменных используют механизм, отличный от описываемого здесь. Приводимые примеры относятся к оболочке типа Bourne shell, например, bash. Подробности можно найти в экранной документации к программе tcsh.

В следующем примере показывается, как переменной присваивается значение оператором "=" и как можно извлекать это значение, приписывая символ "$" перед именем переменной.

/home/larry\# \tinput{foo="hello there"}
Переменной foo присваивается значение hello there. Теперь это значение можно извлечь из переменной, приписав перед именем символ "$". Например команда
/home/larry\# \tinput{echo \$foo} \\
hello there \\
/home/larry\#
даст те же результаты, что и команда
/home/larry\# \tinput{echo "hello there"} \\
hello there \\
/home/larry\#

Такие переменные являются внутренними переменными оболочки, что означает, что к ним имеет доступ лишь командная оболочка. Это может быть полезно при написании скриптов: если нужно, например, проследить за файлом с некоторым именем, это имя можно присвоить некоторой переменной и действовать, как было показано выше. Вывести список всех созданных переменных оболочки можно командой set.

      Кроме этого, оболочка позволяет экспортировать (export) переменные во (внешнее) окружение (environment). Окружение представляет собой набор переменных, к которым имеют доступ все исполняемые команды. После того, как переменная, созданная внутри командной оболочки, экспортирована, она также становится частью окружения. Для экспортирования переменных используется команда export.

    Здесь опять имеются различия между командными оболочками bash и tcsh. Если используемой оболочкой является tcsh, то для установки переменных окружения используется другой синтаксис (а именно -- команда setenv). Более подробно об этом написано в экранной документации к программе tcsh.

  Окружения играют очень важную роль в системе UNIX. Задавая некоторые переменные окружения, которые известны определенным командам, можно конфигурировать эти команды.

Приведем простой пример. Переменная окружения PAGER используется командой man и указывает, что надо выводить экранную документацию по одному экрану за один раз. Если установить значением переменной PAGER имя некоторой команды, то она будет использоваться для вывода документации на экран вместо команды more, используемой по умолчанию.

Установим, например, для переменной PAGER значение "cat". При этом вывод команды man станет выводиться на экран сразу целиком, а не страница за страницей. Продемонстрируем это. Сначала переменной присваивается значение:

/home/larry\# \tinput{PAGER=cat}
Потом переменную PAGER надо экспортировать.
/home/larry\# \tinput{export PAGER}
Теперь переменная PAGER стала частью окружения. Можно попробовать ввести команду man ls. При этом экранная документация целиком промелькнет по экрану, вместо того, чтобы выдаваться экран за экраном с приглашением.

Изменим теперь значение переменной PAGER на "more". Теперь для вывода документации будет использоваться команда more:

/home/larry\# \tinput{PAGER=more}
Заметим, что теперь после изменения значения переменной PAGER команду export использовать не нужно: переменная экспортируется один раз, и все изменения в ней, сделанные после этого, автоматически распространяются на окружение.

Для того, чтобы оболочка не трактовала некоторые символы как специальные, часто строки приходится заключать в кавычки. Например, для того, чтобы оболочка не интерпретировала некоторым специальным образом символы "*", "?" или пробелы, используются кавычки. Есть еще много символов, которые надо защищать от интерпретирования. Подробное объяснение этой процедуры дается в документе Bourne Shell Tutorial (Учебник по оболочке Bourne Shell), изданном компанией SSC.

Экранная документация укажет также, использует ли команда какие-либо переменные окружения. Например, экранная документация к команде man объясняет, что для назначения программы постраничной выдачи используется переменная PAGER.

Иногда несколько команд используют одну и ту же переменную окружения. Например, многим командам нужна переменная окружения EDITOR, чтобы определить имя редактора, вызываемого (когда требуется) по умолчанию.

Окружение также используется для того, чтобы следить за важной информацией о сеансе работы в системе (login session). Примером может служить переменная окружения HOME, которая содержит имя вашего домашнего каталога (home directory):

/home/larry/papers\# \tinput{echo \$HOME} \\
/home/larry

Еще одна интересная переменная окружения -- PS1, определяющая основное приглашение оболочки. Ей можно присвоить новое значение:

/home/larry\# \tinput{PS1={$\,{\rm "}\!\!\!$} Your command, please: {$\,\,{\rm "}$} } \\
Your command, please:
Для того, чтобы вернуться к старому значению этой переменной (так, чтобы в приглашении было имя текущего каталога, за которым следует символ "#"), можно ввести команду
Your command, please: \tinput{PS1={$\,{\rm "}\!\!$} }$\backslash$\tinput{w\# {$\,\,{\rm "}$} } \\
/home/larry\#
О синтаксисе, использованном в этой команде, можно прочитать в экранной документации к программе bash.


next up previous contents
Next: Переменная окружения PATH. Up: Настройка оболочки Previous: Скрипты командной оболочки

root
Sun Aug 29 12:01:30 MSD 1999