Руководство FreeBSD
Пред. | Глава 4. Основы UNIX | След.

# 4.9. Интерпретатор команд

При работе с FreeBSD, в большинстве случаев для выполнения повседневных задач используется командный интерфейс (так называемая ''оболочка'', ''shell''). Основная задача интерпретатора — принимать вводимые команды и выполнять их. Многие командные интерпретаторы имеют встроенные средства для выполнения повседневной работы, например, операции над файлами и каталогами, редактирование командной строки, командные макросы и переменные окружения. Вместе с FreeBSD поставляется несколько командных интерпретаторов, например, `sh`, или Bourne Shell, и `tcsh`, расширенная версия C-shell. Многие другие интерпретаторы доступны из коллекции портов FreeBSD, например `zsh` и `bash`.

Какой из командных интерпретаторов использовать? Это дело вкуса. Если вы программируете на C, то вам, возможно, понравится `tcsh`. Если вы работали с Linux, или только начинаете работать с интерфейсом командной строки UNIX®, попробуйте `bash`. Каждый из названных интерпретаторов имеет свои особенности, которые отличат его от других, и, возможно, повлияют на ваш выбор.

Одна из наиболее часто используемых функций командного интерпретатора – дополнение частичного имени файла до полного. Вы можете набрать только первые несколько символов имени файла, нажать клавишу табуляции (TAB), и командный интерпретатор автоматически завершит имя. Например, у нас есть два файла, названные `foobar` и `foo.bar`. Допустим, мы хотим удалить файл `foo.bar`. Для этого, наберем на клавиатуре `rm fo[Tab].[Tab]`.

Вы увидите следующее: `rm foo[BEEP].bar`.

Здесь [BEEP] – это так называемый консольный сигнал, оповещающий о том, что интерпретатор не в состоянии закончить имя файла, так как по введенным вами символам невозможно однозначно идентифицировать файл. Например, имена файлов `foobar` и `foo.bar` оба начинаются с `fo`, но после нажатия TAB можно однозначно дополнить только до `foo`. Если же теперь ввести точку (`.`) и вновь нажать TAB, интерпретатор достроит имя файла целиком.

Дополнительные возможности при работе с интерпретатором дает использование переменных окружения. Переменные окружения это пары переменная/значение, хранящиеся в памяти интерпретатора. Значение переменных окружения может быть прочитано любой программой, запущенной из командного интерпретатора, и часто содержит настройки для многих приложений и утилит. Ниже приведены некоторые наиболее часто встречающиеся переменные окружения и их значения:

Переменная | Описание
--- | ---
`USER` | Имя текущего пользователя.
`PATH` | Каталоги, разделенные двоеточием, для поиска исполняемых файлов.
`DISPLAY` | Сетевое имя виртуального дисплея X11, доступного для подключения.
`SHELL` | Текущий командный интерпретатор.
`TERM` | Тип терминала пользователя. Используется, чтобы узнать возможности терминала.
`TERMCAP` | Список escape-последовательностей для управления различными функциями терминала.
`OSTYPE` | Название (тип) операционной системы. Например, FreeBSD.
`MACHTYPE` | Архитектура машины (процессора).
`EDITOR` | Выбранный пользователем текстовый редактор.
`PAGER` | Выбранная пользователем утилита просмотра файлов.
`MANPATH` | Каталоги, разделенные двоеточием, для поиска файлов системного справочника.

Установка значений переменных окружения различна для разных оболочек. Например, в интерпретаторах C-стиля, таких как `tcsh` и `csh`, это `setenv`. В интерпретаторах Bourne, таких как `sh` и `bash`, это `export`. Например, чтобы установить или изменить значение переменной `EDITOR` к значению `/usr/local/bin/emacs` в `csh` или `tcsh`, выполните команду:

    % setenv EDITOR /usr/local/bin/emacs

В оболочках Bourne:

    % export EDITOR="/usr/local/bin/emacs"

Чтобы получить значение переменной, например, в командной строке, поместите символ `$` перед именем переменной. Например, команда `echo $TERM` выведет значение переменной `$TERM`.

Командный интерпретатор воспринимает некоторые символы, называемые метасимволами, в качестве управляющих. Один из наиболее часто используемых – символ `*`, который заменяет любое количество символов в имени файла. Метасимволы используются для поиска файлов по маске, например, команда `echo *` делает практически тоже самое, что и команда `ls`, поскольку интерпретатор вызывает команду `echo`, передавая ей имена всех файлов, попадающих под маску `*`.

В некоторых ситуациях требуется, чтобы интерпретатор воспринимал метасимволы как обычные, не несущие специальной смысловой нагрузки. Этого можно достичь, поставив перед символом обратную косую черту (`\`). Например, команда `echo $TERM` выведет тип вашего терминала, в то же время команда `echo \$TERM` выведет именно слово `$TERM`, а не значение переменной `$TERM`.

## 4.9.1. Как изменить командный интерпретатор по умолчанию

Самым простым способом, пожалуй, будет воспользоваться командой `chsh`. Если переменная `EDITOR` определена, то будет загружен соответствующий текстовый редактор, иначе vi. Вам нужно будет изменить значение поля ''Shell:'' и выйти из редактора с сохранением результатов.

Можно также воспользоваться опцией `-s` команды `chsh`. Например, если вы хотите изменить интерпретатор на `bash`, выполните:

    % chsh -s /usr/local/bin/bash

> Замечание: Интерпретатор, который вы будете использовать, обязательно должен быть в файле `/etc/shells`. Обычно, при установке интерпретаторов из коллекции портов, это делается автоматически. Если же это не так, вам нужно будет самостоятельно добавить соответствующую строчку в этот файл.

> Например, если вы установили `bash` вручную и поместили его в каталог `/usr/local/bin`, нужно набрать:

>     # echo "/usr/local/bin/bash" >> /etc/shells

> Теперь можно смело использовать команду `chsh`.

Пред. | Начало | След.
Даемоны, сигналы, уничтожение процессов | Уровень выше | Текстовые редакторы

Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.