Хронологический список
Идея, положенная в основу этого средства, крайне проста. После ввода каждой команды (после нажатия Enter, а не CTRL + C), последняя заносится в список, из которого команды можно извлекать в порядке, обратном вводу.
Простейший способ доступа к хронологическому списку – просмотр его записей нажатием клавиши со стрелкой вверх, пока не будет найдена нужная команда. У хронологического списка есть два основных назначения: поиск ошибочно введенных команд и повторный ввод команд.
Рассмотрим первое. Предположим, вы предприняли попытку просмотреть содержимое файла testfile, для чего ввели команду:
$ 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.