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

При работе с 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.

2.4.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.



Banner.Novgorod.Ru