Подстановка истории
Оболочка предоставляет функцию подстановки истории, аналогичную функции подстановки истории в csh (в подходящих случаях также называемую заменой по истории). В этом разделе описывается синтаксис, используемый для работы с данными истории.
Подстановка истории по умолчанию включена в интерактивных оболочках и может быть отключена с помощью параметра +H встроенной команды set (см. Встроенная команда Set). В неинтерактивных оболочках подстановка истории по умолчанию не выполняется, но её можно включить с помощью set -H.
Подстановка истории добавляет слова из списка истории во входной поток, позволяя легко повторять команды, вставлять аргументы предыдущей команды в текущую строку ввода или быстро исправлять ошибки в предыдущих командах.
Подстановка истории выполняется сразу после считывания полной строки, до того как оболочка разбивает её на слова, и обрабатывает каждую строку отдельно. Bash пытается передать функциям подстановки истории сведения о кавычках, действие которых продолжается с предыдущих строк.
Подстановка истории состоит из двух этапов. На первом определяется, какую запись из списка истории следует использовать при подстановке. На втором выбираются части этой записи, которые нужно включить в текущую запись.
Выбранная из истории запись называется событием, а части этой записи, над которыми выполняются действия, — словами. Для работы с выбранными словами доступны различные модификаторы. Запись разбивается на слова так же, как Bash делает это при чтении ввода, поэтому несколько слов, заключённых в кавычки, считаются одним словом. Обозначение события выбирает событие, необязательное обозначение слова выбирает слова из события, а различные необязательные модификаторы позволяют работать с выбранными словами.
Подстановка истории начинается с символа подстановки истории, которым по умолчанию является «!». Подстановки истории могут встречаться в любом месте ввода, но не могут быть вложенными.
При подстановке истории используются правила экранирования, похожие на правила оболочки: обратная косая черта позволяет отменить специальную обработку следующего символа; одинарные кавычки заключают последовательности символов, которые следует воспринимать буквально, и могут использоваться для подавления подстановки истории; символы в двойных кавычках могут подвергаться подстановке истории, поскольку обратная косая черта может экранировать символ подстановки истории, а одинарные кавычки — нет, так как внутри двойных кавычек они не имеют специального значения.
При использовании оболочки для экранирования символа подстановки истории можно применять только «\» и «'». Однако символ подстановки истории также считается экранированным, если он непосредственно предшествует закрывающей двойной кавычке в строке, заключённой в двойные кавычки.
Если сразу за символом подстановки истории следует один из нескольких символов, подавляющих подстановку истории, она не выполняется, даже если этот символ не экранирован: пробел, табуляция, новая строка, возврат каретки, «=» и другие метасимволы оболочки.
Существует специальное сокращение для подстановки, которое действует, если символ быстрой подстановки (описанный выше в разделе histchars) является первым символом строки. Оно выбирает предыдущую запись из списка истории с помощью обозначения события, эквивалентного !!, и заменяет одну строку другой в этой записи. Это сокращение описано ниже (см. Обозначения событий). Это единственная подстановка истории, которая не начинается с символа подстановки истории.
Некоторые параметры оболочки, задаваемые встроенной командой shopt (см. Встроенная команда Shopt), изменяют поведение подстановки истории. Если включён параметр оболочки histverify и используется Readline, подстановки истории не передаются немедленно синтаксическому анализатору оболочки. Вместо этого обработанная строка снова загружается в буфер редактирования Readline для дальнейшего изменения. Если используется Readline и включён параметр оболочки histreedit, неудачная подстановка истории снова загружается в буфер редактирования Readline для исправления.
Параметр -p встроенной команды history показывает результат подстановки истории до её применения. Параметр -s встроенной команды history можно использовать для добавления команд в конец списка истории без их выполнения, чтобы впоследствии их можно было вызвать. Это особенно полезно в сочетании с Readline.
Оболочка позволяет управлять различными символами, используемыми механизмом подстановки истории, с помощью переменной histchars, как объяснялось выше (см. Переменные Bash). При записи файла истории оболочка использует символ комментария истории для обозначения временных меток истории.
Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/bash/manual/html_node/History-Interaction.html