Хронологический список

Идея, положенная в основу этого средства, крайне проста. После ввода каждой команды (после нажатия 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".

Для хронологического списка также существует ряд полезных функциональных комбинаций клавиш. Некоторые из них перечислены в табл. 16.2.

Из перечисленных комбинаций наиболее интересна Ctrl+R. Это динамичный, интерактивный обратный поиск в списке. По мере набора строки Bash ищет в хронологическом списке команду с совпадающим фрагментом, введенную последней. Чем длиннее набранная строка, тем меньше область поиска нужной команды.

Предположим, необходимо ввести уже вводившуюся сложную поисковую команду. Включите режим поиска, нажав Ctrl+R. На экране появится строка интерактивного поиска.

(reverse-i-search)' ':

Табл. 16.2.Функциональные комбинации клавиш для хронологического списка

Комбинация клавишФункция
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.