Командная строка Linux. Полное руководство - [29]
set | less
и вы увидите их. Однако не все дистрибутивы включают эти функции по умолчанию.
Использование истории
Как рассказывалось в главе 1, bash поддерживает историю вводившихся команд. Этот список команд хранится в домашнем каталоге, в файле с именем .bash_history. Механизм истории помогает уменьшить объем ручного ввода, особенно в сочетании с командами редактирования командной строки.
Поиск в истории
Просмотреть содержимое истории можно в любой момент с помощью команды:
[me@linuxbox ~]$ history | less
По умолчанию bash хранит последние 500 введенных команд. Как изменить это значение, мы узнаем в главе 11. А теперь представим, что вам понадобилось найти команды, использовавшиеся для получения списка содержимого /usr/bin. Вот один из возможных способов:
[me@linuxbox ~]$ history | grep /usr/bin
А теперь представим, что среди результатов нужно выбрать запись с интересующей вас командой:
88 ls -l /usr/bin > ls-output.txt
Здесь число 88 — это порядковый номер записи команды в списке истории. Зная это число, можно воспользоваться еще одной разновидностью подстановки, которая называется подстановкой записей истории (history expansion). Для этого введите:
[me@linuxbox ~]$ !88
и bash заменит !88 содержимым 88-й записи в списке истории. Подробнее об этой форме подстановки записей истории мы поговорим чуть ниже.
bash также дает возможность выполнять поступательный поиск в списке истории. Это означает, что bash может выполнять поиск в списке истории по мере ввода символов, уточняя результаты с вводом каждого нового символа. Чтобы запустить поступательный поиск, нажмите комбинацию CTRL+R и введите искомый текст. Закончив поиск, нажмите ENTER, чтобы выполнить команду, или CTRL+J, чтобы скопировать запись из списка истории в текущую командную строку. Чтобы найти следующее вхождение текста (переместиться «вверх» по списку истории), нажмите CTRL+R еще раз. Чтобы завершить поиск, нажмите CTRL+G или CTRL+C. Следующий пример демонстрирует, как действует поиск:
[me@linuxbox ~]$
Первое нажатие комбинации CTRL+R:
(reverse-i-search)`':
Приглашение к вводу изменится, показывая, что выполняется поступательный поиск в обратном порядке. Под словами «в обратном порядке» подразумевается, что поиск выполняется от «текущего момента» до некоторого момента в прошлом. Далее мы начинаем ввод искомого текста, в данном примере /usr/bin:
(reverse-i-search)`/usr/bin': ls -l /usr/bin > ls-output.txt
Механизм поиска сразу же возвращает результат. Теперь, чтобы выполнить найденную команду, необходимо нажать ENTER, или вы можете скопировать команду в командную строку для дальнейшего редактирования, нажав CTRL+J. Давайте скопируем ее. Нажмите CTRL+J:
[me@linuxbox ~]$ ls -l /usr/bin > ls-output.txt
Механизм поиска вернет управление, командная строка заполнится и будет готова для выполнения!
В табл. 8.5 перечислены некоторые комбинации клавиш, используемые для манипуляций со списком истории команд.
Таблица 8.5. Команды для работы с историей
Клавиша | Действие |
CTRL+P | Переход к предыдущей записи в истории. Действует так же, как клавиша со стрелкой вверх |
CTRL+N | Переход к следующей записи в истории. Действует так же, как клавиша со стрелкой вниз |
ALT+< | Переход в начало (к первой записи) списка истории |
ALT+> | Переход в конец (к последней записи) списка истории |
CTRL+R | Инкрементальный поиск в обратном порядке. Поиск выполняется поступательно, от текущей записи вверх по списку истории |
ALT+P | Поиск в обратном порядке, не инкрементальный. При использовании этого вида поиска введите искомую строку и нажмите ENTER, и только после этого будет выполнен фактический поиск |
ALT+N | Поиск в прямом порядке, не поступательный |
CTRL+O | Выполнить текущую команду в списке истории и перейти к следующей. Эту комбинацию удобно использовать, если требуется повторно выполнить последовательность команд из списка истории |
Подстановка записей истории
Командная оболочка поддерживает специализированный вид подстановки — подстановку записей из списка истории при использовании символа !. Мы уже видели, как восклицательный знак, сопровождаемый числом, замещается записью из списка истории. Этот вид подстановки имеет несколько разновидностей (табл. 8.6).
Не используйте формы !строка и !?строка, если только вы абсолютно точно не знаете содержимого записей в списке истории.
Механизм подстановки записей истории поддерживает также другие комбинации, но эта тема становится слишком запутанной, и мы не станем перегружать себя лишней информацией. Желающие смогут обратиться к странице справочного руководства (man) для bash, в разделе «HISTORY EXPANSION». Загляните туда!
Таблица 8.6. Команды механизма подстановки записей истории
Последовательность | Действие |
!! | Повторяет последнюю команду. Проще, пожалуй, нажать клавишу со стрелкой вверх и ENTER |
!число | Повторяет команду из записи с указанным номером |
!строка | Повторяет последнюю команду в списке истории, начинающуюся с указанной строки |
!?строка | Повторяет последнюю команду в списке истории, содержащую указанную строку |
В дополнение к истории команд в bash большинство дистрибутивов Linux включают программу script, которую можно использовать для записи в файлы целых сеансов работы с командной оболочкой. Базовый синтаксис команды: