[ Страница назад | Страница вперед | Содержание | Индекс | Домой | Юридическая информация | Поиск ]

Руководство пользователя: Операционная система и устройства


Подстановка хронологии в оболочке C

Подстановка хронологии позволяет получить новые команды путем замены слов в предыдущих командах. С помощью подстановки хронологии можно повторить команду, перенести аргументы предыдущей команды в текущую команду или исправить орфографические ошибки в предыдущей команде.

Подстановки хронологии начинаются с символа ! и могут располагаться в любом месте командной строки. Однако подстановки не могут быть вложенными (другими словами, подстановка хронологии не может содержать подстановку хронологии). Для того чтобы блокировать специальное значение символа ! , укажите перед ним символ \ . Кроме того, если символ ! указан перед символом пробела, табуляции, новой строки, = или ( , то подстановка хронологии не выполняется.

Подстановка хронологии выполняется и для тех строк, которые начинаются с символа ^ . Перед обработкой строки, содержащей подстановки хронологии, оболочка выводит ее на экран рабочей станции.

В этом разделе приведена информация по следующим темам:

Списки хронологии

В список хронологии заносятся команды длиной в одно или несколько слов, считанные оболочкой из командной строки. Подстановка хронологии заключается в том, что из строк сохраненных команд выбираются последовательности слов, которые записываются в стандартный ввод.

Размер списка хронологии задается в переменной оболочки history. Значение переменной history можно указать в файле .cshrc или в параметре встроенной команды set. Независимо от значения переменной history, последняя выполненная команда всегда сохраняется. В списке хронологии команды последовательно нумеруются, начиная с 1. Если вы введете встроенную команду history, то появится приблизительно следующий вывод:

9 write michael
10 ed write.c
11 cat oldwrite.c
12 diff *write.c

Будут показаны команды и номера соответствующих событий (порядковые номера). Для ссылки на событие не обязательно применять номер события, однако номер текущего события может отображаться в приглашении системы. Для этого укажите символ ! в строке приглашения, связанной с переменной среды prompt.

Полная ссылка на хронологию содержит указание события, ссылку на слово и один или несколько модификаторов в следующем формате:

Событие[.]Слово:Модификатор[:Модификатор] . . . 

Примечание: Можно изменить не более одного слова. Строка не может содержать пробелы.

В предыдущем примере вывода команды history номер текущего события равен 13. В этом примере можно задать следующие ссылки на предыдущие события:

!10 Событие номер 10.
!-2 Событие номер 11 (номер текущего события минус 2).
!d Команда, начинающаяся с символа d (номер события 12).
!?mic? Команда, содержащая подстроку mic (номер события 9).

Такие выражения просто переносят команды, связанные с указанными событиями, без какого-либо изменения. Специальное выражение !! представляет собой ссылку на предыдущую команду; отдельная команда !! в строке ввода запускает предыдущую команду.

Описание событий

Для выбора отдельных слов из команд, связанных с событиями, укажите событие с символом : и одну из следующих ссылок на слово (слова в строке ввода последовательно нумеруются с 0):

0 Первое слово (имя команды).
n n-й аргумент.
^ Первый аргумент.
$ Последний аргумент.
% Слово, найденное при выполнении поиска ?строки?, который был выполнен непосредственно перед этим.
x-y Интервал слов с порядковыми номерами от x до y.
-y Интервал слов с порядковыми номерами от нуля до y.
* Все аргументы или пустая строка, если событию соответствует только одно слово (имя команды).
n* n-й аргумент с конца.
x- Задает те же аргументы, что и выражение x*, за исключением последнего.

Если ссылка на слово начинается с символа ^, $, *, - или %, то двоеточие между указанием события и ссылкой на слово можно опустить. За необязательной ссылкой на слово можно указать последовательность следующих модификаторов, указав перед каждым из них двоеточие:

h Удаляет расширение в полном имени.
r Удаляет последние компоненты .xxx, оставляя только имя.
e Удаляет все, кроме расширения .xxx.
s/СтароеСлово/Новое Слово/ Вместо значения переменной СтароеСлово подставляет значение переменной НовоеСлово.

В качестве левой части подстановки указывается не шаблон строки, применяемый в редакторе, а некоторое слово, представляющее собой единый блок без пробелов. Обычно в качестве разделителя между словами СтароеСлово и НовоеСлово указывается символ /. Однако в качестве разделителя можно задать любой символ. В следующем примере в качестве разделителя применяется символ %, поэтому символ / может выступать в качестве части слова:

s%/home/myfile%/home/yourfile%

Оболочка заменит выражение, состоящее из амперсанда (&), за которым указано СтароеСлово, на НовоеСлово. В следующем примере имя /home/myfile будет заменено на /temp/home/myfile.

s%/home/myfile%/temp&%

Пустое слово при подстановке заменяется оболочкой на последнюю подстановку или на последнюю строку, которая применялась в контекстном поиске !?Строка?. Последний ограничитель (/) можно опустить, если сразу за выражением следует символ новой строки. Для изменения элементов списка хронологии применяются следующие модификаторы:

t Удаляет все начальные компоненты пути, за исключением последнего.
& Повторяет предыдущую подстановку.
g Указывается, если необходимо применить изменения на глобальной основе, то есть для всех вхождений каждой строки.
p Показывает новую команду, но не запускает ее.
q Заключает в кавычки слова для подстановки, блокируя дальнейшие подстановки.
x Действует так же, как и модификатор q, но разбивает строку на слова, считая разделителями символы пробела, табуляции и новой строки.

Если модификатор g предшествует остальным модификаторам, то изменяется только первое указанное слово.

Если в ссылке на хронологию не задано событие (например, !$), то по умолчанию применяется предыдущая команда. Если предыдущая ссылка на хронологию задана в той же строке, то оболочка повторяет предыдущую ссылку. Например, следующая последовательность команд выбирает первый и последний аргумент команды, имя которой содержит строку ?foo?.

!?foo?^ !$

Строка ввода, которая начинается с символа ^, представляет собой специальный тип ссылки на хронологию. Это выражение эквивалентно команде !:s^, являясь короткой записью ссылки на текст предыдущей строки. Например, команда ^ lb^ lib исправляет ошибку в слове lib из предыдущей команды.

При необходимости подстановку хронологии можно заключить в { }, чтобы отделить ее от последующих символов. Например, если вы хотите задать ссылку на следующую команду:

ls -ld ~paul

для того, чтобы выполнить команду:

ls -ld ~paula

то укажите следующее выражение:

!{l}a

В данном примере команда !{l}a выполняет поиск команды, имя которой начинается с символа l, а затем добавляет к ней символ a.

Заключение строки в одинарные и двойные кавычки

Для отмены оставшихся подстановок заключите строку в одинарные или двойные кавычки. Если вы заключите строку в '  ' , то дальнейшая интерпретация символов строки выполняться не будет; если вы заключите строку в "  " , то будет выполняться дальнейшая обработка строки. В обоих случаях результатом обработки строки или части строки будет одно слово.


[ Страница назад | Страница вперед | Содержание | Индекс | Домой | Юридическая информация | Поиск ]