
KTNI_Kozlov_otvety / 36
.doc36. Настройка командного интерпретатора. Понятия хронологии списка команд, переменных, псевдонимов. Возможности редактирования командной строки.
Оболочка операционной системы (от англ. shell — оболочка) — интерпретатор команд операционной системы, обеспечивающий интерфейс для взаимодействия пользователя с функциями системы.
Стандартом POSIX определён язык оболочки, включающий конструкциипоследовательного (перевод строки, точка с запятой), условного («if», «case», "||", «&&») и циклического («for», «for in», «while», «until») исполнения команд, а также оператор присваивания.
На практике большинство дистрибутивов использует Bourne again Shell (BASH), который соответствует стандарту POSIX, в качестве командного интерпретатора по умолчанию.
Хронологический список
Идея, положенная в основу этого средства, крайне проста. После ввода каждой команды (после нажатия Enter, а не Ctrl+C), последняя заносится в список, из которого команды можно извлекать в порядке, обратном вводу.
Простейший способ доступа к хронологическому списку - просмотр его записей нажатием клавиши со стрелкой вверх, пока не будет найдена нужная команда. У хронологического списка есть два основных назначения: поиск ошибочно введенных команд и повторный ввод команд.
Рассмотрим первое. Предположим, вы предприняли попытку просмотреть содержимое файла testf ile, для чего ввели команду
$ moer testfile
После нажатия Enter, на экране появится сообщение об ошибке.
bash: moer: command not found.
Для быстрого исправления ситуации достаточно вернуть команду в командную строку нажатием клавиши со стрелкой вверх, исправить moer на more (воспользовавшись функциями редактирования командной строки) и нажать Enter.
Другая ситуация - конфигурирование некоторой программы. При этом обычно приходится несколько раз подряд редактировать конфигурационный файл и запускать программу. А для таких повторов нет средства лучше хронологического списка.
Существует быстрый способ доступа к хронологическому списку - при помощи восклицательного знака (!). Если ввести восклицательный знак с несколькими следующими за ним начальными буквами одной из команд из хронологического списка, то эта команда будет выполнена (будет повторено последнее обращение к ней).
Например, если ранее была выполнена команда
$ ps aux | grep httpd | more
ее выполнение можно повторять вводом
$ !ps
если только после нее не вводилась другая команда, начинавшаяся с "ps". После ввода ! ps выполняется последняя команда из хронологического списка, начинающаяся с "ps".
Для хронологического списка также существует ряд полезных функциональных комбинаций клавиш. Некоторые из них перечислены в табл.1.
Из перечисленных комбинаций наиболее интересна Ctrl+R. Это динамичный, интерактивный обратный поиск в списке. По мере набора строки Bash ищет в хронологическом списке команду с совпадающим фрагментом, введенную последней. Чем длиннее набранная строка, тем меньше область поиска нужной команды.
Предположим, необходимо ввести уже вводившуюся сложную поисковую команду. Включите режим поиска, нажав Ctrl+R. На экране появится строка интерактивного поиска.
(reverse-i-search)' ':
Табл.1. Функциональные комбинации клавиш для хронологического списка
Комбинация клавиш |
Функция |
Ctrl+P |
Переход к предыдущей команде в хронологическом списке |
Ctrl+N |
Переход к следующей команде в хронологическом списке |
Esc, < |
Переход к началу хронологического списка (команде, введенной первой) |
Esc, > |
Переход в конец хронологического списка (к команде, введенной последней) |
Ctrl+R |
Поиск по списку в обратном направлении |
Ctrl+O |
Выполнение текущей команды хронологического списка и вывод( следующей для редактирования или выполнения |
По мере набора символов в этой строке Bash отыскивает в хронологическом списке команду с совпадающим фрагментом, введенную последней. Например, набор одной буквы "f" может дать следующий результат.
(reverse-i-search)`f: pico info/.signature
Если продолжить и набрать "fi", можно получить
(reverse-i-search)`fi': rm -rf StarOffice-3.1
Наконец, после набора"fin",получаем то, что искали:
(reverse-i-search)`fin': find / -name 'foo' -print
Для ввода найденной команды достаточно нажать Enter.
Редактирование командной строки
Одна из возможностей Bash, отсутствовавшая в более ранних оболочках (Bourne Shell или С Shell) - редактирование командной строки. Без этого допущенную в наборе команды ошибку можно было исправить, только удалив все символы после нее. Например, если в команде
$ /usr/kocal/bin/mycommand
ошибочно набрано "kocal" вместо "local", то вернуть курсор к "k" можно только удалив все последующие символы, которые придется набрать вновь после исправления ошибки. Надо ли объяснять, насколько это неэффективно!
В современных оболочках, в том числе и Bash, предусмотрен полный набор средств редактирования командной строки. Курсор можно перемещать по строке при помощи клавиш со стрелками, при необходимости удаляя или вставляя символы. Ввод команды нажатием клавиши Enter можно выполнять, не перемещая курсор в конец строки. По умолчанию, командная строка Bash находится в режиме вставки, так что набираемые символы не замещают существующие, а вставляются между ними.
Чтобы ускорить редактирование командной строки, особенно при наборе длинных команд, в Bash предусмотрено несколько функциональных комбинаций клавиш, перечисленных в табл. 2.
Табл.2.Функциональные комбинации клавиш для редактирования командной строки
Комбинация клавиш |
Функция |
Ctrl+A |
Переход в начало строки |
Ctrl+E |
Переход в конец строки |
Ctrl+B |
Переход на один символ влево |
Ctrl+F |
Переход на один символ вправо |
Esc, В |
Переход на одно слово влево |
Esc,F |
Переход на одно слово вправо |
Ctrl+L |
Очистка экрана с выводом командной строки вверху |
Ctrl+D |
Удаление символа в текущей позиции курсора |
Backspace |
Удаление символа слева от курсора |
Ctrl+T |
Поменять местами символ в позиции курсора с символом слева от него |
Esc, Т |
Поменять местами слово в позиции курсора со словом слева от него |
Esc, U |
Перевод текущего слова в верхний регистр |
Esc.L |
Перевод текущего слова в нижний регистр |
Esc, С |
Перевод текущего слова в нижний регистр с заглавной первой буквой |
Ctrl+K |
Удаление символов от позиции курсора до конца строки |
Тот, кто работает в редакторе emacs, сразу обратит внимание, что в приведенной таблице перечислены функциональные комбинации клавиш именно этого редактора. Действительно, набор функциональных клавиш оболочки Bash позаимствован из emacs. Можно установить альтернативный набор из редактора vi, но последний, как и его набор функциональных клавиш, менее популярен среди программистов и опытных системных администраторов, поэтому в данной книге не рассматривается.
Список команд из табл. 2 - лишь незначительная часть всех команд редактирования, предоставляемых оболочкой Bash. Однако это основные функции, необходимые большинству пользователей для эффективной работы. Более подробный список функций редактирования можно найти в разделе HEADLINE страницы руководства оболочки Bash, для вывода которой необходимо ввести в командной строке man bash.
Установка переменных среды в Bash
У каждой оболочки свой синтаксис установки переменных среды. Обычно в Bash это выполняется в два этапа: присвоение переменной значения и экспорт переменной в среду. Например, чтобы задать по умолчанию текстовый редактор emacs, можно присвоить переменной среды EDITOR значение emac s:
$ EDITOR=emacs
затем экспортировать ее следующей командой.
$ export EDITOR
Обе команды можно объединить в одну.
$ export EDITOR=emacs
При рассмотрении подстановочных символов мы покажем, что на значение переменной среды можно сослаться, указав символ "$" как префикс имени этой переменной в командной строке Bash. Так можно дополнять значение переменной среды. Например, если переменная пути по умолчанию PATH равна
/bin:/usr/bin:/usr/X11R6/bin
к ней можно добавить составляющую /usr / local/bin, введя следующую команду.
$ export PATH=$PATH:/usr/local/bin
В этой команде текущее значение переменной PATH представлено выражением $РАТН. Новое значение переменной следующее:
/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin