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

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

Какой из командных интерпретаторов использовать? Это дело вкуса. Если Вы программируете на C, то Вам, возможно, понравится tcsh, а если Вы работали с Linux, то Вас скорее устроит 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Каталоги, разделенные двоеточием, в которых производить поиск файлов системного справочника.

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

setenv EDITOR /usr/local/bin/emacs

Если Вы используете bash:

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

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

Командный интерпретатор воспринимает некоторые символы, называемые метасимволами, в качестве управляющих, несущих специальные функции. Одни из наиболее часто используемых - символ *, который заменяет любое количество символов в имени файла, и ?, заменяющий один символ. Эти метасимволы используются для поиска файлов по маске, например, команда echo * выполняет практически тоже самое, что и команда ls, так как под маску * попадают все файлы из текущего каталога (на самом деле, это всегда так и зависит от командного интерпретатора, например, в bash под маску * не попадут файлы, начинающиеся с точки . - скрытые файлы).

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

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

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

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

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

Note: Помните, чтобы использовать некоторую программу в качестве командного интерпретатора, она должна быть обязательно упомянута в файле /etc/shells. Обычно, при установке интерпретаторов из дерева портов, это делается автоматически. Если же это не так, Вам нужно будет самим добавить соответствующую строчку в этот файл.

Например, допустим, что Вы установили bash вручную, без использования соответствующего порта, и поместили его в каталог /usr/local/bin. В таком случае, можно набрать:

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

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