Версия для печати

Архив документации на OpenNet.ru / Раздел "Программирование, языки" (Многостраничная версия)
Особенности работы в оболочке bash

 

 


Документ кратко суммирует то, что Bash унаследовал от борновской оболочки: структуры контроля оболочки, встроенные команды, переменные и другие особенности. Здесь также перечисляются наиболее значительные раэличия между Bash и борновской оболочкой.

1. ВОЗМОЖНОСТИ ОБОЛОЧКИ БОРНА.

2. ВОЗМОЖНОСТИ C-SHELL

3. ВОЗМОЖНОСТИ ОБОЛОЧКИ КОРНА ksh

4. СПЕЦИФИЧЕСКИЕ ВОЗМОЖНОСТИ ВАSH

5. УПРАВЛЕНИЕ ЗАДАНИЯМИ.

6. ДИАЛОГОВОЕ ИСПОЛЬЗОВАНИЕ ИСТОРИИ.

7. РЕДАКТИРОВАНИЕ КОМАНДНОЙ СТРОКИ.


Вперед Назад Содержание
Вперед Назад Содержание

Особенности работы оболочки bash.

 

 


Документ кратко суммирует то, что Bash унаследовал от борновской оболочки: структуры контроля оболочки, встроенные команды, переменные и другие особенности. Здесь также перечисляются наиболее значительные раэличия между Bash и борновской оболочкой.

1. ВОЗМОЖНОСТИ ОБОЛОЧКИ БОРНА.

2. ВОЗМОЖНОСТИ C-SHELL

3. ВОЗМОЖНОСТИ ОБОЛОЧКИ КОРНА ksh

4. СПЕЦИФИЧЕСКИЕ ВОЗМОЖНОСТИ ВАSH

5. УПРАВЛЕНИЕ ЗАДАНИЯМИ.

6. ДИАЛОГОВОЕ ИСПОЛЬЗОВАНИЕ ИСТОРИИ.

7. РЕДАКТИРОВАНИЕ КОМАНДНОЙ СТРОКИ.


Вперед Назад Содержание
Вперед Назад Содержание

1. ВОЗМОЖНОСТИ ОБОЛОЧКИ БОРНА.

Bash - зто сокращение "Bourne Again SHell" (Еще одна оболочкa Борна). Борновская оболочка - традиционная оболочка Unix, первоначально написанная Стивеном Борном. Все встроенные команды борновской оболочки доступны в Bash, и правила вычислений и синтаксис вэяты иэ спецификации Posix 1003.2 для стандартной оболочки Unix.

Этот раздел кратко суммирует то, что Bash унаследовал от борновской оболочки: структуры контроля оболочки, встроенные команды, переменные и другие особенности. Здесь также перечисляются наиболее значительные раэличия между Bash и борновской оболочкой.

1.1 Циклические конструкции.

Замечание: Символ ";" в описании синтаксиса команд может быть заменен на одну или несколько строк.

Bash содержит следующие циклические конструкции:

until

Синтаксис команды until:

until тестовые_команды;  do  команды-следствия;  done
Выполнение "команд-следствий" происходит, пока финальная команда в "тестовых_командах" имеет ненулевое состояние на выходе.

while

Синтаксис:

while тестовые_команды;  do  команды-следствия;  done
Выполнение "команд-следствий" происходит, пока финальная команда в "тестовых_командах" имеет нулевое состояние на выходе.

for

Синтаксис:

for  имени  [in  список_слов...];  do  команды;   done
Выполняет команды для каждого члена "списка_слов", равного текущему члену. Если "in список_слов" отсутствует, предполагается "in "$@"".

1.2 Условные конструкции

if

Синтаксис:

if тестовые_команды; then
    команды-следствия;
[elif сверхтестовые_команды; then
  сверхследcтвия;]
[else альтернативные_следствия;]
fi
Выполнение "команд-следствий" начинается, только если финальная команда "тестовых_команд" имеет нулевое выходное состояние. В противном случае каждый список elif выполняется в свою очередь, и если его состояние на выходе нулевое, то выполняются "сверхследствия", и команда эавершена. Если присутствуют также "альтернативные_следствия", и финальная команда в предложении if или elif имеет ненулевое выходное состояние, то выполняются "альтернативные_следствия".

case

Синтаксис:

case слово in [шаблон[|шаблон]...)  команды  ;;]...esac
Иэбирательное выполнение команд основано на сравнивании "слова" с "шаблоном". Символ "|" испольэуется для разделения нескольких шаблонов. Пример испольэования case для описания интересного свойства животного:

echo -n "Введите имя животного:"
read animal
echo -n "$animal имеет "
case $animal in
  лошадь|собака|кошка) echo -n "четыре";;
  человек|кенгуру) echo -n "две";;
  *) echo -n "неиэвестное число ";;
esac
echo "ног(и)."

1.3 Функции оболочки

Функции оболочки позволяют при выполнении группы команд испольэовать одно имя для всей группы. Функции выполняются так же, как "обычные команды".

Функции описываются с испольэованием следующего синтаксиса:

[function] имя () { список команд; }
Это описывает функцию с именем "имя". Тело функции - "список команд", эаключенный в фигурные скобки. Этот список запускается всегда, когда "имя" указывается как имя команды. Выходное состояние функции - выходное состояние последней команды, выполняемой в теле.

Когда функция выполняется, ее аргументы становятся поэиционными параметрами времени ее выполнения. Специальный параметр # содержит количество позиционных параметров. Позиционный параметр 0 неизменный.

Если встроенная команда return выполняется внутри функции, выполнение функции прекращается и возобновляется со следующей команды после вызова функции. Когда функция завершается, значения позиционных параметров и специального параметра # становятся равными значениям до вызова функции.

1.4 Встроенные команды оболочки Борна

Нижеследующие всроенные команды оболочки унаследованы из оболочки Борна. Эти команды реализованы, как указано в стандарте Posix 1003.2.

:

ничего не делает кроме расширения каких-либо аргументов и выполнения переназначения

.

читает и выполняет команды из аргумента имени файла в текущем контексте оболочки

break

выход из цикла for, while или until

cd

смена текущей рабочей директории

continue

выполнение следующей итерации цикла for, while или until

echo

вывод аргументов, разделенных пробелами, на стандартное устройство вывода

eval

аргументы собираются в одну команду, которая потом читается и выполняется

exec

если задан аргумент команды, он смещает оболочку. Если не задан аргумент команды, переназначения могут быть использованы для влияния на текущую среду оболочки

exit

выход из оболочки

export

отмечает аргументы как переменные для передачи в дочерние процессы в среде

getopts

передает опции в скрипты оболочки или функции

hash

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

kill

посылает сигнал процессу

pwd

выводит текущий рабочий каталог

read

читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.

readonly

отмечает переменные как неизменяемые

return

заставляет функцию оболочки выйти с указанным значением

shift

перемещает позиционные параметры налево

test

вычисляет условное выражение

times

выводит имя пользователя и системное время, использованное оболочкой и ее потомками

trap

указывает команды, которые должны выполняться при получении оболочкой сигнала

mask

устанавливает маску создания процессового файла

unset

вызывает уничтожение переменных оболочки

wait

ждет выхода из дочернего процесса и сообщает выходное состояние.

1.5 Переменные оболочки Борна

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

IFS

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

PATH

разделенный двоеточиями список каталогов, в которых оболочка ищет команды

HOME

текущий домашний каталог пользователя

CDPATH

разделенный двоеточиями список каталогов, используемых в поиске пути для сd-команд

MAILPATH

разделенный двоеточиями список файлов, которые оболочка периодически проверяет на наличие почты. Можно также указать, какое сообщение выводить для отделения имени файла от сообщения с "?" В тексте послания $_ ставится для имени текуще го файла почты

PS1

базовая строка приглашения

PS2

вторичная строка приглашения

OPTIND

индекс последней опции, обработанной встроенной командой getopts

OPTARG

значение аргумента последней опции, обработанной встроенной командой getopts.

1.6 Важнейшие отличия от оболочки Борна

Bash реализует практически такую же грамматику, подстановку параметров и переменных, перенаправление и использование кавычек и апострофов, как и в оболочке Борна. Bash опирается на стандарт Posix 1003.2 как спецификацию того, как эти возможности должны быть реализованы. Однако, имеются некоторые отличия между обычной оболочкой Борна и стандартом POSIX; этот раздел описывает некоторые наиболее значительные отличия. Некоторые другие отличия будут упомянуты в других разделах этого документа.

Bash использует ключевой символ "!" для отрицания значения, возвращаемого конвейером. Очень полезно, когда выражение if выполняется только при возвращении ненулевого значения.

Bash включает brace-расширение (см. раздел 2.2 ).

Bash включает шаблоны образцов Posix и ksh- стиля, убирая конструкции %% и ## для удаления ведущей или завершающей подстроки из переменных.

Обеспечиваются Posix и ksh форма подстановки команд $(), наряду с конструкцией ` ` из оболочки Борна (которая также обеспечивается для совместимости).

Переменные, присутствующие в начальной среде оболочки, автоматически выносятся в дочерние процессы. Оболочка Борна не делает этого должным образом, если переменные точно не промаркированы с помощью команды export.

Поддерживается расширение ${#xx}, которое возвращает длину $xx.

Переменная IFS используется для разделения не всех слов, а только результатов расширения. Это закрывает давнее отверстие в защите оболочки.

Могут быть переменная и функция с одним и тем же именем: sh не разделяет два пространства имен.

В функциях Bash могут быть локальные переменные, таким образом можно писать весьма полезные рекурсивные функции.

Опция noclobber предназначена для избежания переписывания существующих файлов с помощью переназначенного вывода.

Bash позволяет написать функцию так, чтобы переопределить встроенную команду, и обеспечивает доступ к функциональности встроенных команд внутри функции благодаря встроенным командам builtin и command.

Встроенная команда builtin позволяет избирательное выключение функций при выполнении поиска команд.

Отдельные встроенные команды могут выть включены или выключены при использовании встроенной команды enable.

Функции могут быть переданы потомку через среду.

Встроенная команда read читает окончание строки в \ с помощью опции -r и использует переменную $REPLY по умолчанию, если аргументы не даны.

Встроенная команда return может быть использована для прекращения выполнения скриптов, выполненных встроенными командами . или source.

Встроенная команда umask позволяет символизировать аргументы аналогично chmod.

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


Вперед Назад Содержание
Вперед Назад Содержание

2. ВОЗМОЖНОСТИ C-SHELL

С-оболочка(csh) была создана Биллом Джоем в университете Беркли. Считается, что в общем она имеет лучшие возможности диалогового использования, чем изначальная оболочка Борна. Некоторые возможности csh присутствуют в Bash, включая управление заданиями, расширение истории, т.н. "защищенное" переназначение и некоторые переменные для контроля за диалоговым режимом оболочки (IGNOREEOF).

Подробно об подстановке строк из истории см. гл.6.

2.1 Тильдовые расширения

Bash имеет тильдовое (~) расширение, подобное, но не идентичное соответствующему в csh. Следующая таблица показывает, что слова без кавычек начинаются с тильдового расширения.

~

текущее значение $HOME.

~/foo

`$HOME÷foo`

~fred÷foo

Подкаталог foo домашнего каталога пользователя fred.

~+÷foo

`$PWD/foo`

~-

`$OLDPWD/foo`

Bash также выполняет тильдовое расширение для слов, следующих за операторами переназначения и слов, следующих за `=` в операторах обозначения.

2.2 Brace-расширение.

Вrace (фигурноскобочное)-расширение - механизм, с помощью которого можно генерировать произвольные строки. Этот механизм подобен pathname-расширению (подробнее см. Bash manual page), но в нем нет необходимости существования имен файлов. Образец brace-расширения: опционная преамбула, затем серия разделенных запятыми строк, заключенная в фигурные скобки, и опционная постамбула. Преамбула предваряет каждую строку, заключенную в фигурные скобки, а постамбула заключает каждую результирующую строку - слева направо.

Brace-расширения могут вкладываться одно в другое. Результаты каждой расширенной строки не сортируются: сохраняется порядок слева направо. Например:

a{d,c,b}e
расширяется в
ade ace abe.
Brace-расширение выполняется перед всеми остальными расширениями, и все специальные символы других расширений сохраняются в результате. Это строго текстуально. Вash не использует никакой синтаксической интерпретации контекста расширения или текста, заключенного в фигурные скобки.

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

Эта конструкция используется для краткости, когда нужно породить общий префикс строк длиннее, чем в следующем примере:

mkdir usr/local/src/bash/{old,new,dist,bugs}
или

chown root/usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}.

2.3 Встроенные команды С-оболочки

Bash имеет несколько встроенных команд, описания которых очень похожи на соответствующие в csh.

pushd

pushd [dir | +n | -n]
Сохраняет текущий каталог в списке и применяет cd к dir. Без аргументов изменяет верхний из двух каталогов.
+n

Перемещает n-й каталог (считая с левой стороны списка, выведенного с помощью dirs) на вершину списка с помощью обработки стека.

-n

Перемещает n-й каталог (считая с правой стороны списка, выведенного с помощью dirs) на вершину списка с помощью обработки стека.

dir

Устанавливает текущий рабочий каталог на вершину стека и применяет cds к dir. Для того, чтобы посмотреть список каталогов, используется команда dirs.

popd

popd [+n | -n]
Выкладывает каталог из стека и применяет cds к новому верхнему каталогу. Если не даны аргументы, убирает верхний каталог из стека и применяет cds к новому верхнему каталогу. Элементы нумеруются начиная с 0 с первого каталога, занесенного в список с помощью dirs, таким образом команда popd эквивалентна popd +0.
+n

Перемещает n-й каталог (считая с левой стороны списка, выведенного с помощью dirs), начиная с 0.

-n

Перемещает n-й каталог (считая с правой стороны выведенного списка от dirs), начиная с 0.

dirs

dirs [+n | -n]  [-l]
Выводит список текущих запомненных каталогов. Каталоги заносятся в список с помощью команды pushd. Возвращаться обратно по списку можно с помощью команды popd.

+n

Выводит n-й каталог (считая с левой стороны списка,выведенного с помощью dirs, когда вызов без опций), начиная с 0.

-n

Выводит n-й каталог (считая с правой стороны списка, выведенного с помощью dirs, когда вызов без опций), начиная с 0.

-l

Выдает полный листинг; формат вывода списка по умолчанию использует тильду для обозначения домашнего каталога.

history

history [n] [ [-w -r -a -n] [имя файла]]
Выводит список истории с номерами строк. Строковые приставки с a * модифицируются. Аргумент n сообщает списку только последние n строк. Опция -w - запись текущей истории в файл истории; -r - чтение текущего файла истории и превращение его содержимого в список истории. Аргумент -a присоединение новых строк истории (строки истории входят во время начала текущего сеанса Bash) к файлу истории. Наконец, аргумент -n - чтение строк истории, которые еще не считаны из файла истории, в текущий список истории. Это строки, присоединенные к файлу истории во время начала текущего сеанса Bash. Если дано имя файла, то он используется как файл истории, иначе если $HISTFILE имеет значение, то оно используется. В противном случае используется `"/.bash_history`.

logout

Выход из login-оболочки.

source

Синоним '.' (см. раздел 1.4. "Встроенные команды оболочки Борна").

2.4 Переменные С-shell

IGNOREEOF

Если эта переменная задана, она представляет ряд последовательных EOF Bash, которые будут читаться перед выходом. По умолчанию Bash осуществляет выход на чтение одного EOF.

cdable_vars

Если эта переменная задана, Bash рассматривает некаталоговые аргументы команды cd как имена переменных, чьи значения каталоги, в которые нужно перейти.


Вперед Назад Содержание
Вперед Назад Содержание

3. ВОЗМОЖНОСТИ ОБОЛОЧКИ КОРНА ksh

В этой главе описаны возможности, первоначально появившиеся в оболочке Корна (ksh). В некоторых случаях стандарт Posix 1003.2 позаимствовал эти команды и переменные из оболочки Корна. Bash обеспечивает эти возможности, используя стандарт Posix как руководство.

3.1 Конструкции оболочки Корна

Bash включает конструкцию select оболочки Корна. Эта конструкция позволяет облегчать генерацию меню. Она имеет почти тот же синтаксис, что и команда for.

Cинтаксис команды select:

select имя [in список_слов] do команды; done
Cписок слов, следующих за in, расширяется, генерируя список элементов. Набор расширенных слов, каждому из которых предшествует число, выводится в стандартный поток ошибки. Если "in список_слов" пропущено, выводятся позиционные параметры, затем возникает приглашение PS3 и читается строка со стандартного ввода. Если строка состоит из числа, соответствующего одному из выведенных слов, то значение "имени" присваивается этому слову. Если строка пуста, то опять выводятся слова и приглашение. Если читается EOF, то выполняется команда select. Любое другое прочитанное значение вызывает присваивание "имени" нуля. Считанная строка хранится в переменной REPLY.

"Команды" выполняются после каждого выбора до команды break или return. Здесь команда select считается выполненной.

3.2 Встроенные команды оболочки Корна

В этом разделе описаны встроенные команды Bash, взятые из ksh.

fc

fc [-e имя_редактора] [-nlr] [первая] [последняя]
fc -s [pat=rep] [команда]
Команда фиксации. В первой форме ряд команд от первой до последней выбирается из списка истории. И первая, и последняя могут быть указаны как строка (чтобы обнаружить самую последнюю команду, начинающуюся с этой строки) или как число (индекс в списке истории, где отрицательное число используется как смещение числа текущей команды). Если последняя команда не указана, ей присваивается первая. Если первая не указана, ей присваивается предыдущая команда для редактирования и -16 для внесения в список. Если дан флаг -l, команды выносятся в виде списка на стандартный вывод. Флаг -n хранит номера команд при составлении списка. Флаг -r меняет порядок списка на обратный. Иначе редактор, заданный в имя_редактора, вызывается файлом, содержащим эти команды. Если имя_редактора не дано, используется значение следующего расширения переменной: ${FCEDIT:-${EDITOR-vi}}. Если задано значение FCEDIT, используется оно, если значение EDITOR оно, если не задано ни то, ни другое, используется vi. Редактирование завершено, когда команды редактирования отображены на экране и выполнены.

Во второй форме "команда" перевыполняется после каждого случая pat, - в некоторых командах он заменен на rep.

Полезно использовать псевдоним r='fc -s' с командой fc, таким образом при наборе r cc выполняется последняя команда, начинающаяся с сс, и при наборе r перевыполняется последняя команда (см. раздел 3.4. "Псевдонимы").

let

встроенная команда let позволяет выполнять арифметические операции с переменными оболочки. Подробнее см. раздел 4.7.3. "Арифметические встроенные функции".

typeset

Команда typеset обеспечивает согласованность с оболочкой Корна, однако она сделана как рудимент команды declare (см. раздел 4.4 "Встроенные команды Bash").

3.3 Переменные оболочки Корна

REPLY

Переменная по умолчанию для встроенной команды read.

RANDOM

Каждый раз при ссылке на этот параметр генерируется случайное целое число. Присваивание этой переменной значения обновляет генератор случайных чисел.

SECONDS

Эта переменная зависит от количества секунд, прошедших со старта оболочки. При присваивании переменной значения это количество прибавляется к приписанному значению, и расширенное значение = приписанное значение + число секунд с момента присваивания.

PS3

Значение этой переменной используется как приглашение для команды select.

PS4

Это приглашение, выводимое перед высвечиванием командной строки, когда установлена опция -x (см. раздел 4.5).

PWD

Текущий рабочий каталог, установленный командой cd.

OLDPWD

Предыдущий рабочий каталог, установленный командой cd.

TMOUT

Если заданное значение больше 0, оно рассматривается как количество секунд ожидания ввода после высвечивания первичного приглашения. Если ввод по истечении этого времени не произошел, Bash завершает работу.

3.4 Псевдонимы

Оболочка содержит ряд псевдонимов, которые могут быть введены в действие или запрещены с помощью команд alias и unalias.

Для первого слова каждой команды, если нет кавычек, проверяется, имеет ли оно псевдоним. Если имеет, то оно заменяется на текст псевдонима. Имя псевдонима и текст замены могут содержать любые допустимые символы ввода оболочки, включающие метасимволы оболочки, за тем исключением, что имя псевдонима не может содержать =. Первое слово текста замены проверяется на наличие псевдонима, но слово, идентичное псевдониму, не расширяется вторично. Это значит, что можно, например, расширить псевдоним ls до "ls -F", и Bash не будет пытаться рекурсивно расширить текст замены. Если значение последнего символа псевдонима пробел или tab, то слова команды, следующей за псевдонимом, также проверяются на расширение псевдонима.

Псевдонимы создаются и заносятся в список с помощью команды alias, и уничтожаются с помощью команды unalias.

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

Псевдонимы не расширяются, когда оболочка не является диалоговой.

Правила, касающиеся определения и использования псевдонимов, несколько запутаны. Bash всегда считывает по меньшей мере одну целую строку ввода перед выполнением любой из команд на этой строке. Псевдонимы расширяются после чтения команды, а не после ее выполнения. Таким образом, определение псевдонима, возникающее на той же строке, что и другая команда, не действует до тех пор, пока не будет прочитана следующая строка ввода. Это значит, что команды, следующие за определением псевдонима на той же строке, не затрагиваются новым псевдонимом. Выход из режима осуществляется, когда команды выполнены. Псевдонимы расширяются, когда прочитано определение функции, а не тогда, когда она выполнена, т.к. определение функции - само по себе составная команда. Как следствие, псевдонимы, определяемые в функции, недоступны до тех пор, пока она не выполнится. Для безопасности нужно всегда располагать определения псевдонимов на отдельных строках, и не стоит использовать команду alias в составных командах.

Следует заметить, что почти во всех случаях псевдонимы вытесняются функциями оболочки.

Встроенные команды для псевдонимов

alias

alias [имя[=значение]...]
Без аргументов - выводит список псевдонимов на стандартное устройство вывода. Если есть аргументы, псевдоним определяется для каждого имени, чье значение дано. Если значение не дано, выводятся имя и значение псевдонима.

unalias

unalias [-a] [имя...]
Удаляет имя из списка псевдонимов. При использовании -а удаляются все псевдонимы.


Вперед Назад Содержание
Вперед Назад Содержание

4. СПЕЦИФИЧЕСКИЕ ВОЗМОЖНОСТИ ВАSH

В этой главе описаны возможности, уникальные для Bash.

4.1 Вызов Bash

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

-norc

Не читает инициализацию файла '~/.bashrc' в диалоговой оболочке. Это по умолчанию, если оболочка вызывается как sh.

-rcfile имя_файла

Выполняет команды из файла имя_файла (вместо '~/.bashrc') в диалоговой оболочке.

-nonprofile

Не загружает файл начальных действий системы '/etc/profile' или любой из файлов персональной инициализации '~/.bash-profile' ,'~/bash-login' или '~/.profile', когда Bash вызывается как login.

-version

выводит номер версии оболочки.

-login

включает оболочку, как если бы она вызывалась с login. Это эквивалентно 'exec - bash', но может происходить из другой оболочки, такой как csh. Если вы хотите заменить вашу текущую входную оболочку Bash, вы должны набрать 'exec bash -login'.

-nonbraceexpansion

Не выполняет brace-расширение (см. раздел 2.2).

-nonlineediting

Не использует библиотеку GNU (СМ. главу 7 "Редактирование командной строки") для чтения диалоговых командных строк.

-posix

Изменяет поведение Bash в соответствии со стандартом Posix 1003.2, когда операция по умолчанию отличается от этого стандарта. Это предназначено для того, чтобы строго подчинить Bash стандарту.

Есть несколько односимвольных опций, которые недоступны встроенной команде set.
-c строка

Читает и выполняет команды со строки после выполнения опций, затем выходит.

-i

Заставляет оболочку выполнять команды в интерактивном режиме.

-s

Если есть этот флаг, или после обработки опций не осталось аргументов, то команды считываются со стандартного ввода. Эта опция позволяет устанавливать позиционные параметры при вызове диалоговой оболочки.

Диалоговая оболочка - оболочка, у которой ввод и вывод связаны с терминалом (как определенные (isatty()), или запущенная опцией -i.

4.2 Файлы начальных действий оболочки

Когда и как Bash выполняет файлы начальных действий:

Таким образом обычно ~/bash_profile содержит строку:

if  [-f ~/.bashrc ]; then source ~/.bashrc; fi
после (или перед) любой специфической инициацией входа.

Если Bash вызывается как sh, он старается как можно больше походить на sh. Для login-оболочки он пытается использовать в качестве источника только '/etc/profile' и '~/.profile', в таком порядке. Oпция nonprofile может при этом использоваться для блокирования режима. Оболочка, вызванная sh, не пытается использовать в качестве источника ни один из файлов начальных действий.

Когда Bash запускается в режиме POSIX опцией -posix командной строки, он следует стандарту Posix 1003.2 для файлов начальных действий. В этом режиме переменная ENV расширяется, и этот файл используется в качестве источника; другие файлы начальных действий не считываются.

4.3 Является ли оболочка диалоговой?

Может возникнуть ситуация, что хочется определить внутри сценария начальных действий, выполняется bash в диалоговом режиме или нет. Для того, чтобы это сделать, нужно проверить переменную $PS1 - она задана в диалоговых оболочках и не задана в недиалоговых.

Таким образом:

if [-z "$PS1"]; then
      echo Эта оболочка недиалоговая
      else
      echo Эта оболочка диалоговая
      fi
Вы можете заставить диалоговый Bash не выполнять ваш файл '~/.bashrc' с флагом -norc, можете изменить имя файла '~/.bashrc' на любое другое имя файла с помощью имени -rcfile, и можете заставить Bash не выполнять ваш файл '~/.bash_profile' с флагом -nonprofile.

4.4 Встроенные команды Bash.

В этом разделе описаны встроенные команды, уникальные для Bash или расширенные в нем.

builtin

builtin [встроенная_команда_оболочки [аргументы]]
Выполняет встроенную команду оболочки. Это используется, когда вы хотите заменить встроенную команду оболочки функцией, но нужна функциональность встроенной команды внутри самой функции.

bind

bind [-m таблица_ключей] [-lvd] [-q имя]
bind [-m таблица_ключей] -f имя_файла
bind  [-m  таблица_ключей]   последовательность_ключей:имя_функции
Изображает ключ текущего Readline (см. главу 7 "Редактирование командной строки") и связи функций, или компонует последовательность ключей в функцию Readline или макрофункцию. Введенный скомпонованный синтаксис идентичен синтаксису '.inputrc' (см. раздел 7.3.), но каждая связь должна быть передана как отдельный аргумент:'"\C-x\C-r":re-read-init-file'. Если используются опции, они имеют следующие значения:
-m таблица_ключей

Используется таблица_ключей как таблица ключей, на которую должны влиять последующие связывания: имена таблицы ключей, которые могут введены emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command и vi-insert. vi эквивалентно vi-command, emacs эквивалентно emacs-standard.

-l

Перечисляет имена всех функций чтения строки.

-v

Перечисляет текущие имена функций и свяэывания.

-d

Сбрасывает имена функций и присваивания так, чтобы их можно было перечитывать.

-f имя_файла

Считывает присваивания ключей файла с именем имя_файла.

-q

Запрос о том, какие ключи вызывают названную функцию.

command

command[-pVv] команда [аргументы...]
Выполняет команду с аргументом, пропуская функции оболочки. Если у вас есть функция оболочки с именем ls и вы хотите назвать так же команду, вы говорите 'command ls'. Опция -p осуществляет использование переменной по умолчанию для $PATH, что гарантирует нахождение всех стандартных сервисных программ.

Если обеспечиваются и опция -V, и опция -v, то выдается описание "команды". Опция -v вызывает одно слово, указывающую на команду или имя файла, использованные для вызова "ко манды", которую нужно вывести; опция -V вызывает более мно гословное описание.

declare

declare [-frxi] [имя[=значение]]
Объявляет переменные и/или дает им атрибуты. Если не даны имена, вместо них выводятся значения переменных. -f значит использование только имен функций. -r говорит, что имена должны только читаться. -x отмечает имена для экспорта. -i рассматривает переменную как целое число; арифметическое вычисление (см. раздел 4.7) выполнено, когда переменной прис воено значение. При использовании + вместо - удаляется заме щающий атрибут. Использование функции declare делает имена локальными, как при помощи команды local.

enable

enable [n] [-a] [имя...]
Включает и выключает команды оболочки. Это позволяет ис пользовать команду диска, имеющую то же имя, что и встроен ная команда оболочки. Если используется n, то "имена" стано вятся запрещенными. В противном случае имена вводятся в дей ствие. Например, чтобы использовать бинарный поиск test с помощью $PATH вместо встроенной команды оболочки, нужно ввести 'enable -n test'. Опция -a предназначена для занесения в список каждой встроенной команды с пометкой, включена она или нет.

help

help [шаблон]
Выводится вспомогательная информация о встроенных командах. Если определен шаблон, help дает подробную информацию о всех командах, совпадающих с шаблоном, в противном случае выводится список встроенных команд.

local

local имя[=значение]
Для каждого аргумента создается локальная переменная под названием "имя" и ей дается "значение". local может использоваться только внутри функции: он заставляет перемен ную иметь видимый контекст, ограниченный этой функцией и ее потомками.

type

type [-all] [-type | -path] [имя...]
Для каждого "имени" помечает, как оно должно интерпретиро ваться при использовании имени команды. Если используется флаг type, type возвращает единственное слово - "alias", "function", "builtin", "file", или "keyword", если имя псевдоним, функция оболочки, встроенная команда оболочки, дисковый файл или зарезервированное оболочкой слово соответственно. Если используется флаг -path, type возвращает имя дискового файла, или ничего, если type не должен возвратить "file". Если используется флаг -all, возвращаются все места, содержащие выполнимый названный файл. Псевдонимы и функции включаются если и только если флаг -path также не использует ся.

ulimit

ulimit [acdmstfpnuvSH] [предел]
Ulimit проводит контроль за источниками, используемыми для начальных процессов в оболочке,в системах, которые допускают такой контроль. Если дана опция, она интерпретируется следующим образом:
-S

изменяет и сообщает гибкий предел, связанный с источником (по умолчанию, если не дана опция -H).

-H

изменяет и сообщает твердый предел, связанный с источником.

-a

сообщает все текущие пределы.

максимальный размер созданного файла оперативной памяти.

-d

максимальный размер сегмента данных процесса.

-m

максимальный размер резидентного набора.

-s

максимальный размер стека.

-t

максимальное время cpu в секундах.

-f

максимальный размер файла, созданного оболочкой.

-p

максимальный размер канального буфера.

-n

максимальное число открытых файловых дескрипторов.

-u

максимальное число процессов, доступных отдельному пользователю.

-v

максимальное количество виртуальной памяти, доступное процессу.

Если дан предел, зто - новое значение указанного источника. В противном случае выводится текущее значение указанного источника. Если не дана опция, предполагается -f. Значения -f - в 1024-байтовых блоках, исключение делается для -t (в секундах), -p (в единицах 512-байтных блоков), -n и -u (неизмеримые).

4.5 Встроенная команда set.

Зта встроенная команда настолько перегружена, что ей посвящается целый раздел.

set [abefhkmnptuvxldCHP] [-o опция] [аргумент]
-a

отмечает переменные, которые модифицированы или созданы для зкспорта.

-b

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

немедленный выход, если выходное состояние команды ненулевое.

-f

выключает генерацию имени файла (глоббирование).

-h

обнаруживает и запоминает (хеширует) команды как определенные функции до того, как функция будет выполнена.

В окружении команды располагаются все аргументы ключевых слов, не только те, которые предшествуют имени команды.

-m

Разрешается управление заданиями (см. главу 5).

-n

Читает команды, но не выполняет их.

-о имя_опции

Устанавливает флаг, соответствующий имени_опции.

allexport

то же, что -а.

braceexpand

оболочка должна выполнить brace-расширение (см. раздел 2.2).

emacs

использует интерфейс редактирования emacs (см. главу 7 "Редактирование командной строки").

errexit

то же, что -е.

histexpand

то же, что -Н.

ignoreeof

оболочка не выходит при чтении EOF.

interactive-comments

позволяет вызывать слово, начинающееся с '#', и все оставшиеся символы на этой строке игнорировать в диа логовой оболочке.

monitor

то же, что -m.

noclobber

то же, что -C.

noexec

то же, что -n.

noglob

то же, что -f.

nohash

то же, что -d.

notify

то же, что -b.

nounset

то же, что -u.

physical

то же, что -P.

posix

изменяет режим Bash в соответствии со стандартом Posix 1003.2, когда операция по умолчанию отличается от него. Предназначен для того, чтобы сделать режим строго подчиненным зтому стандарту.

privileged

то же, что -p.

verbose

то же, что -v.

vi

использует интерфейс редактирования строки редактора vi.

xtrace

то же, что -x.

-p

Включает привилегированный режим. В зтом режиме файл $ENV не выполняется, и функции оболочки не наследуются из среды. Зто включается автоматически начальными действиями, если идентификатор зффективного пользователя (группы) не равен идентификатору реального пользователя (группы). Выключение зтой опции присваивает идентификатор зффективного пользователя (группы) идентификатору реального пользователя (группы).

-t

выход после чтения и выполнения команды.

-u

во время замещения рассматривает незаданную переменную как ошибку.

-v

выдает строки ввода оболочки по мере их считывания.

-x

выводит команды и их аргументы по мере выполнения команд.

-l

сохраняет и восстанавливает связывание имени в команде for.

-d

Выключает хеширование команд, найденных для выполнения. Обычно команды запоминаются в хеш-таблице и, будучи однажды найденными, больше не ищутся.

не позволяет существующим файлам перенаправление вывода.

закрывает замену стиля ! истории. Этот флаг принимается по умолчанию.

Если установлена, не следует символьному указателю при выполнении команды типа cd, которая изменяет текущий каталог. Вместо этого используется физический каталог.

--

Если нет аргументов, следующих за зтим флагом, то не задаются позиционные параметры. В противном случае позиционные параметры присваиваются аргументам, даже если некоторые из них начинаются с а-.

-

Сигнал конца опции, вызывающей присваивание оставшихся аргументов позиционным параметрам. Опции -x и -v выключаются. Если здесь нет аргументов, позиционный параметр не изменяется.

При использовании + вместо - осуществляется выключение зтих флагов. Флаги также могут использоваться при вызове оболочки. Текущий набор флагов можно найти в $-. Оставшиеся N переменных - позиционные параметры и присваиваются по порядку $1, $2,...,$N. Если аргументы не даны, выводятся все переменные оболочки.

4.6 Переменные Bash.

Эти переменные задаются и используются Bash, но в других оболочках обычно специально не рассматриваются.

HISTCONTROL

history_control

При присвоении значения 'ignorespace' строки, начинающиеся с пробела или табуляции, не вводятся в список истории. При присвоении значения 'ignoredups' строка, соответствующая прошлой введенной строке, не вводится. 'ignoreboth' сочетает эти две опции. Присвоение любого другого значения обозначает сохранение всех строк в списке "истории".

HISTFILE

Имя файла, хранящего команду истории.

HISTSIZE

Если задана, это максимальное число команд, которые должны быть запомнены в истории.

histchars

Восходит к трем символам, контролирующим расширение истории, быстрое замещение и лексемизацию (см. раздел 6.1 "Диалог истории"). Первый символ - символ расширения истории, обозначающий начало расширения истории - обычно '!'. Второй обозначает быструю замену при нахождении первого символа на строке, обычно '^'. Опционный третий символ помечает остаток строки - комментарий, когда он найден как первый символ слова, обычно '#'. Символ комментария истории вызывает замену истории, игнорируемую для оставшихся слов на строке. Не обязательно вызывает синтаксический разбор оболочки для рассмотрения остатка строки как комментария.

HISTCMD

Номер истории или индекс списка истории текущей команды. Если HISTCMD не задана, она теряет свои специальные свойства, даже если впоследствии она опять задается.

hostname_completion_file

HOSTFILE

Содержит имя файла в том же формате, что и '/etc/hosts', которое должно считываться, когда оболочке нужно завершить hostname. Вы можете иэменить файл в диалоговом режиме. В следующий раз, когда вы попытаетесь завершить hostname, Bash добавит содержание файла к уже существующей базе данных.

MAILCHECK

Показывает, как часто (в секундах) оболочка должна проверять файлы, указанные в MAILPATH, на наличие почты.

PROMPT_COMMAND

Если есть, содержит строку с командой для выполнения перед выводом каждой базовой команды приглашения ($PS1).

UID

Числовой идентификатор реального пользователя для текущего пользователя.

ЕUID

Числовой идентификатор зффективного пользователя для текущего пользователя.

HOSTTYPE

Строка, описывающая машину, на которой запущен Bash.

OSTYPE

Cтрока, описывающая операционную систему, в которой запущен Bash.

FIGNORE

Разделенный двоеточиями список суффиксов, игнорируемых при завершении имени файла. Имя файла, чей суффикс соответствует одному из приведенных в FIGNORE, извлекается из списка соответствующих имен файлов. Образцовое значение - '.o:~'.

INPUTRC

Имя файла начальных действий Readline, заменяемое по умолчанию на '~/.inputrc'.

BASH_VERSION

Имя версии текущего зкземпляра Bash.

IGNOREEOF

Контролирует получение символа EOF оболочкой в отдельном вводе. Если задана, то ее значение - число последовательных символов EOF, которые могут быть считаны как первые символы строки ввода перед выходом из оболочки. Если переменная существует, но не имеет числового значения, то по умолчанию зто 10. Если переменная не существует, EOF отмечает конец ввода в оболочку. Действует только в диалоговых оболочках.

no_exit_on_failed_exec

Если эта переменная существует, то оболочка не выходит, если она не может выполнить файл, указанный в команде exec.

nolinks

Если есть, говорит о том, что не нужно следовать символическим указателям в командах, изменяющих текущий рабочий каталог. По умолчанию Bash следует по логической цепи каталогов при выполнении команд таких как cd, изменяющая рабочий каталог. Например, если '/usr/sys/' - указатель на '/usr/local/sys', то:

$ cd/usr/sys; echo $PWD
/usr/sys
$ cd..; pwd
/usr
Если nolinks существует, то:
$ cd /usr/sys; echo $PWD
/usr/local/sys
$  cd ..; pwd /usr/local
См. также описание опции -p встроенной команды set, раздел 4.5.

4.7 Арифметика оболочки.

Арифметические вычисления.

Оболочка позволяет вычислять арифметические выражения как одно из расширений оболочки или с помощью встроенной команды let.

Вычисления производятся в longint без проверки на переполнение, хотя деление на 0 прерывается и отмечается как ошибка. Нижеследующий список операторов сгруппирован по уровням равноприоритетных операторов. Уровни располагаются в порядке уменьшения приоритета.

-+

унарные минус и плюс

!~

логическое и поразрядное отрицания

*÷%

умножение, деление, остаток

+ -

сложение и вычитание

<< >>

левый и правый поразрядные сдвиги

<= >= < >

сравнение

==!=

равенство и неравенство

&

поразрядное И

^

поразрядное исключительное ИЛИ

|

поразрядное ИЛИ

&&

логическое И

||

логическое ИЛИ

= *= ÷= %= += -= <<= >>= &= ^= |=

распределение по приоритету.

Переменные оболочки допустимы как операнды; параметрическое расширение выполняется перед вычислением выражения. Значение параметра внутри выражения обязательно longint. Переменная оболочки не обязана иметь целый атрибут, включаемый в выражение.

Константы, начинающиеся с 0, интерпретируются как восьмиричные числа. Начало 0x или 0X обозначает шестнадцатиричное число. Кроме того, числа в форме [основание#]n, когда основание - десятичное число от 2 до 36, представляющее арифметическое основание системы счисления, а n - число в зтой системе. Если основание не указано, подразумевается 10.

Операторы вычисляются в порядке приоритета. Субвыражения в круглых скобках вычисляются первыми и могут не подчиняться правилам приоритета.

Арифметическое расширение.

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

$[ выражение ]
$(( выражение ))
Выражение рассматривается, как если бы оно было заключено в двойные кавычки, но двойные кавычки внутри фигурных или круглых скобок специально не рассматриваются. Все лексемы в выражении подвергаются параметрическому расширению, командному замещению и устранению кавычек. Арифметические подстановки могут вкладываться одна в другую.

Вычисление выполняется согласно вышеуказанным правилам. Если выражение некорректно, Bash выдает сообщение, обозначающее сбой, и замещение невозможно.

Арифметические встроенные команды.

let

let выражение [выражение]
Встроенная команда let позволяет выполнять арифметические действия над переменными оболочки. Каждое выражение вычисляется согласно приведенным ранее правилам (см. раздел 4.7.1). Если последнее вычисление равно 0, let возвращает 1, в противном случае - 0.

4.8 Контролирование приглашения.

Значение переменной $PROMPT_COMMAND проверяется непосредственно перед выдачей Bash каждого базового приглашения. Если оно задано и не ноль, то значение выводится, как если бы оно было напечатано на командной строке.

Приведенная таблица описывает специальные символы, которые могут появляться в переменной PS1:

\t

время в формате часы: минуты: секунды.

\d

Дата в формате день_недели месяц число.

\n

перевод строки.

\s

имя оболочки, базовое имя $0 (участок, следующий за конечным /)

\w

текущий рабочий каталог

\W

базовое имя $PWD

\u

имя пользователя, под которым вы эарегистрированы

\h

hostname

\#

номер зтой команды

\!

номер истории зтой команды

\nnn

символ, соответствующий восьмиричному числу nnn

\$

если зффективный uid=0, то #, иначе $.

\\

обратная косая черта (backslash)

\[

начало последовательности невыводимых символов. Может использоваться для осуществления управления терминалом в приглашении.

\]

конец последовательности невыводимых символов.


Вперед Назад Содержание
Вперед Назад Содержание

5. УПРАВЛЕНИЕ ЗАДАНИЯМИ.

В этой главе рассматривается, что такое управление заданиями, как оно работает и как Bash осуществляет доступ к его средствам.

5.1 Основы управления заданиями.

Управление заданиями относится к способности избирательной остановки (приостановки) выполнения процессов и продолжению их выполнения позже. Обычно пользователь использует зто средство с помощью диалогового интерфейса, применяемого совместно с системным драйвером терминала и Bash.

Оболочка связывает задание с каждым конвейером. Она содержит таблицу текущих выполняемых заданий, которые могут быть внесены в список с помощью команды jobs. Когда Bash начинает работу асинхронно (в фоновом режиме), он выдает строку типа

[1] 25647
обозначающую, что задание имеет номер 1, и идентификатор последнего процесса конвейера, связанного с этим процессом, равен 25647. Все процессы отдельно взятого конвейера принадлежат одному и тому же заданию. Вash использует абстрактное понятие "задание" как основу управления заданиями.

Для облегчения использования интерфейса пользователя в управлении заданиями система содержит понятие идентификатора группы текущего процесса терминала (ИГТПТ). Члены зтой группы процесса (процессы, идентификатор группы которых равен ИГТПТ), получают генерированные клавиатурой сигналы, такие как SIGINT. Зти процессы должны быть приоритетными. Фоновые процессы - это процессы, идентификаторы группы которых отличаются от ИГТПТ: такие процессы не воспринимают сигналы клавиатуры. Только приоритетные процессы позволяют чтение с терминала или запись на него. При попытке фонового процесса что-либо прочесть с терминала или записать на него его драйвер посылает сигнал SIGTTIN (SIGTTOU), который, будучи получен, останавливает процесс.

Если операционная система, в которой выполняется Bash, предполагает управление заданиями, Вash позволяет его осуществить. Набрав символ приостановки (обычно '^Z', control-Z) во время выполнения процесса, можно вызвать остановку процесса и возврат в Bash. При наборе символа задержанной приостановки (обычно '^Y', control-Y) вызывается остановка во время попытки считать ввод с терминала, и управление возвращается в Bash. Можно манипулировать постановкой зтого задания, используя команду bg для продолжения фонового процесса, fg - для продолжения приоритетного или kill для прекращения. '^Z' действует мгновенно и имеет дополнительный зффект - вывод отложенного вывода и сброс печатающей головки.

Есть ряд способов ссылок на задание в оболочке. Символ % представляет имя задания. На задание с именем n можно сослаться с помощью %n. На начало задания также можно сослаться при использовании префикса имени, а для попадания на командную строку - подстроки. Например, '%ce' ссылается на остановленное задание сe. При использовании '?ce' осуществляется ссылка на любое задание, содержащее 'се' в командной строке. Если префикс или подстрока соответствует более чем одному заданию, Bash сообщает об ошибке. Символы %% и %+ ccылаются на текущее задание оболочки - последнее задание, остановленное на переднем плане. На предыдущее задание можно сослаться с помощью '%-'. В выводе, относящемся к заданиям (вывод команды jobs), текущее задание всегда обозначается '+', а предыдущее задание - '-'.

Простым упоминанием задания можно вызвать его перенос на передний план. '%1' (синоним 'fg %1') - переносит 1 с фона на передний план. Аналогично, '%1&'(синоним 'bg %1&') - с переднего плана на фон.

Оболочка немедленно узнает об изменениях в состоянии задания. Обычно Bash ждет вывода приглашения перед сообщением об изменениях в состоянии задания, чтобы не прерывать какой-либо другой вывод. Если задана опция -b встроенной команды set, то Bash cразу докладывает об изменениях (см. раздел 4.5). Зта возможность также контролируется переменной notify.

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

5.2 Встроенные команды управления заданиями.

bg

bg [описание_задания]
Размещает описанное задания на заднем плане, как если бы оно начиналось с '&'. Если не дано описание_задания, используется текущее задание.

fg

fg [описание_задания]
Переносит описанное задание на передний план и делает его текущим. Если не дано описание задания, используется текущее задание.

jobs

jobs [-lpn] [описание_задания]
                jobs -x команда [описание_задания]
Первая форма заносит в список активные задания. Опция -l, кроме обычной информации, перечисляет идентификаторы процесса; опция -p заносит в список только идентификатор про цесса, ведущего в группе задания. Опция -n высвечивает только те задания, которые изменили состояние после последнего использования команды jobs. Если дано описание_зада ния, вывод ограничивается информацией о задании. Если опи сание задания не дано, перечисляются состояния всех зада ний. Если используется опция -x, jobs заменяет любое зада ние, найденное в команде или аргументах, соответствующим идентификатором группы процесса, и выполняет команду, пропуская ее аргументы и возвращая выходное состояние.

suspend

suspend [-f]
Ожидает выполнения зтой оболочки с момента получения сигна ла SIGGONT; опция -f предназначена для ожидания даже в том случае, если зто login-оболочка.
Когда действует управление заданиями, встроенные команды kill и wait также принимают аргументы описания заданий.

5.3 Переменные управления заданиями.

auto_resume

Зта переменная контролирует проведение оболочкой диалога с пользователем и управление заданиями. Если она существует, то односложные простые команды без переназначений рассматриваются как кандидаты на возобновление существующего зада ния. Здесь не допускается двойственности: если у вас есть более одного задания, начинающегося с набранной вами строки, то будет выбрано самое недавнее по времени задание. Имя остановленного задания в этом контексте есть командная строка, используемая для его начала. Если переменной присваивается значение exact, то используемая строка должна точно соответствовать имени остановленного задания; если значение substring, то используемая строка должна соответствовать подстроке имени остановленного задания. Значение substring обеспечивает функциональность аналогично идентификатору задания %? (см. раздел 5.1). Если присваивается любое другое значение, используемая строка должна быть префиксом имени остановленного задания: зто обеспечивает фун кциональность аналогично идентификатору задания %.

notify

присвоение переменной значения зквивалентно 'set-b', ее исключение зквивалентно 'set+b' (см. раздел 4.5 "Встроенная команда set").


Вперед Назад Содержание
Вперед Назад Содержание

6. ДИАЛОГОВОЕ ИСПОЛЬЗОВАНИЕ ИСТОРИИ.

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

6.1 Диалог истории.

Библиотека истории обеспечивает возможности расширения истории, подобные тем, что обеспечиваются csh. Нижеследующее описывает синтаксис, используемый для манипулирования информацией истории.

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

Обозначение события.

Обозначение события - ссылка на командную строку, занесенную в список истории.

!

начинает замену истории, за исключением случая, когда следует после пробела, табуляции, =, ( или в начале новой строки.

!!

ссылается на предыдущую команду. Это синоним !-1.

!n

ссылается на командную строку n.

!-n

ссылается на команду, расположенную n строк назад.

!строка

cсылается на самую новую по времени команду, начинающуюся со "строки".

!? строка [?]

cсылается на самую новую команду, содержащую "строку".

!#

вся командная строка, напечатанная в то время.

^string1^string2^

Быстрая замена. Повторяет последнюю команду, заменяющую строку1 строкой2. Зквивалентно !!:s/string1/string2/.

Обозначения слова.

А: отделяет упоминание события от обозначения слова. Может пропускаться, когда обозначение слова начинается с a^, $, * или %. Cлова пронумерованы с начала строки начиная с первого слова (т.н. нулевого).

0

нулевое слово - командное слово для большинства приложений.

n

n-e слово.

^

первый аргумент - слово номер 1.

$

последний аргумент.

%

слово, соответствующее самому последнему поиску ?string?.

x-y

ряд слов: -y является cокращением 0-y.

*

Все слова, за исключением 0-го. Зто синоним 1-$. Не является ошибкой использование *, даже если в событии всего одно слово. В зтом случае возвращается пустая строка.

x*

сокращение x-$.

x-

то же, что x-$ и x*, но ислючается последнее слово.

Модификаторы.

К опционному обозначению слова можно добавить один или более следующих модификаторов, каждому из которых предшествует а:

h

удаляет конечный компонент составного имени, оставляя только начало.

r

удаляет конечный суффикс, оставляя основное имя.

е

удаляет все, кроме конечного суффикса.

t

удаляет все ведущие компоненты составного имени, оставляя хвост.

p

выводит новую команду, но не выполняет ее.

q

заключает в кавычки замененные слова во избежание дальнейших присваиваний.

x

заключает в кавычки замененные слова, как при поммощи q, но входит в слова на табуляциях, пробелах и в начале новой строки.

s÷old÷new

Заменяет new на первое появление old в строке события. На месте / можно использовать любой разграничитель. Он должен быть заключен между old и new с помощью единственного backslash. Если в new возникает &, он заменяется на old. Единственный backslash заключает &. Конечный разграничитель опционный, если зто последний символ строки ввода.

&

Повторяет предыдущее присваивание.

g

Вызывает изменения не только в одной строке событий. Используется в сочетании с s, как в gs/old/new/, или с &.


Вперед Назад Содержание
Назад Содержание

7. РЕДАКТИРОВАНИЕ КОМАНДНОЙ СТРОКИ.

В этой главе описаны основные возможности интерфейса редактирования командной строки GNU.

7.1 Введение в редактирование строки.

В следующих разделах описывается нотация, используемая для представления нажатия клавиш.

Текст С-К читается 'контрол-к' и описывает символ, получающийся при нажатии на клавиши Control и K.

Текст М-К читается 'мета-к' и описывает символ, получающийся при нажатии на клавиши Meta (если таковая имеется) и K. Если у вас нет клавиши Meta, тот же результат можно получить при нажатии ESC K. И то, и другое называется метафированием клавиши К.

Текст М-С-К читается мета-контрол-к и описывает символ, получающийся при метафировании С-К.

Некоторые клавиши имеют собственные названия, их так и обозначают в тексте или инициальном файле (см. раздел 7.3): DEL, ESC, LFD, SPC, RET и TAB.

7.2 Диалог чтения строки.

Часто во время сеанса диалога вы печатаете длинную строку только для того, чтобы потом заметить, что в первом слове есть ошибка. Библиотека чтения строки дает вам множество команд для манипулирования текстом при его наборе, позволяющих не перенабирать большую часть строки, а фиксировать набранное вами. Используя зти команды редактирования, вы перемещаете курсор на место, нуждающееся в коррекции и уничтожаете лишнее или вставляете недостающее. Затем, если вы удовлетворены этой строкой, вы просто нажимаете RETURN. Для этого необязательно находиться на конце строки: воспринимается целая строка вне зависимости от положения на ней курсора.

Основные средства чтения строки.

Для включения символов чтения строки нужно просто их набрать. Набранный символ возникает на месте курсора, а затем курсор перемещается на один пробел вправо. Если вы неправильно набрали символ, можно использовать erase для возвращения и уничтожить неправильно набранный символ.

Иногда бывает, что вы неправильно набрали символ и заметили зто только после того, как набрали еще несколько символов. В таком случае наберите С-В для передвижения курсора влево и исправьте свою ошибку. После зтого вы можете передвинуть курсор обратно с помощью C-F.

Если вы добавляете текст в середину строки, вы замечаете, что символы справа от курсора сдвигаются, чтобы освободить место для вводимого вами текста. Так же, когда вы уничтожаете текст сзади от курсора, символы справа сдвигаются, чтобы заполнить освободившееся место.

Список основных средств редактирования строки:

С-В

передвигается назад на один символ.

C-F

передвигается вперед на один символ.

DEL

уничтожает символ, стоящий на курсоре.

Печать символов:
INS

вставка символа в строку на месте курсора.

C-

Отменяет последнее ваше действие. Вы можете отменить последовательно с конца все действия вплоть до чистой строки.

Команды более быстрого движения по строке.

С-А

передвигается на начало строки.

С-Е

передвигается на конец строки.

M-F

передвигает вперед слово.

M-B

передвигает назад слово.

C-L

очищает зкран и печатает сверху текущую строку.

Заметим, что C-F передвигает вперед символ, а M-F -слово, аналогично назад: C-В и М-В. Есть негласное соглашение, что клавиша Control оперирует с символами, а Meta - со словами.

Команды уничтожения текста на строке.

Уничтожить текст - значит удалить его со строки, но сохранить для дальнейшего использования: обычно с помощью т.н. янкирования (перевставления) он возвращается на строку. Если в описании команды сказано, что она уничтожает текст, можете быть уверены, что вы получите его назад на другом (или на том же) месте позже.

Если вы используете команду уничтожения, текст сохраняется в "кольце уничтожения" (kill-ring). При любом количестве последовательных уничтожений весь уничтоженный текст сохраняется в одном месте, таким образом, когда вы хотите его янкировать, вы получаете его весь. В kill-ring не указывается строка: текст, набранный на строке и затем уничтоженный, можно янкировать и позже, после набора следующей строки.

Список команд для уничтожения текста.

С-К

Уничтожает текст от курсора до конца строки.

M-D

Уничтожает символы от курсора до конца слова или, если курсор между словами, до конца следующего слова.

M-DEL

Уничтожает символы от курсора до начала слова или, если курсор между словами, до начала предыдущего слова.

C-W

Уничтожает символы от курсора до предыдущего пробела. Отличается от M-DEL, поскольку слова могут ограничиваться по-разному.

Ниже показывается, как янкировать текст обратно на строку. Янкирование - копирование наиболее нового уничтоженного текста с kill-буфера.
C-Y

Янкирует последний уничтоженный текст назад на место курсора.

M-Y

Вращает kill-ring и янкирует новое. Вы можете это сделать, только если предыдущая команда была C-Y или M-Y.

Аргументы Readline.

Вы можете превратить числовые аргументы в команды чтения строки. Иногда аргумент действует как счетчик повторений, иногда - как отмечаемый знак аргумента. Если вы превращаете отрицательный аргумент в команду, действие которой обычно направлено вперед, то действие полученной команды будет направлено назад. Например, чтобы уничтожить текст до начала строки, вы можете набрать М--С-К.

Общий способ превращения числовых аргументов в команду такой: набрать метафированные символы перед командой. Если первый символ, который вы набрали - знак минус, то аргумент будет отрицательный. Теперь, когда вы набрали один символ Meta для запуска аргумента, вы можете набрать остальные символы, а затем команду. Например, для того чтобы подать команду C-D на аргумент 10, вы можете набрать M-10 C-D.

7.3 Инициализационный файл Readline.

Хотя библиотека Readline используется вместе с похожими на Emacs связями клавиш, устанавливаемыми по умолчанию, возможно, вы захотите использовать другое множество связей клавиш. Вы можете настроить программы, использующие Readline, на помещение команд в инициализационный файл вашего домашнего каталога. Имя зтого файла берется из значения переменной INPUTRC оболочки. Если зта переменная не задана, по умолчанию предполагается '~/.inputrc'.

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

Команда C-x С-r считывает заново инициализационный файл, таким образом учитываются все изменения, которые вы могли туда внести.

Инициализационный синтаксис Readline.

Существует несколько основных конструкций, допустимых в инициализационном файле Readline. Пустые строки игнорируются. Строки, начинающиеся с #, считаются комментариями. Строки, начинающиеся с $, обозначают условные конструкции (см.раздел 7.3.2 "Инициализационные условные конструкции"). Остальные переменные обозначают задания переменных и связи клавиш.

Задания переменных.

Вы можете изменить состояние некоторых переменных в Readline с помощью использования команды set внутри инициализационного файла. Ниже показывается, как использовать команду редактирования строки vi:

set editing-mode vi
Есть несколько переменных, которые можно теперь задать - так мало, что мы их перечислим.
editing-mode

Переменная editing-mode проверяет, какой режим редактирования используется. По умолчанию Readline включается в режиме редактирования Emacs - наиболее простом. Этой переменной можно присвоить emacs или vi.

horizontal-scroll-mode

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

mark-modified-lines

Эта переменная при присвоении ей On помечает звездочкой (*) начала модифицированных строк истории. По умолчанию зто Оff.

bell-style

Контролирует, что происходит, когда Readline хочет дать звуковой сигнал. Если ей присвоено none, Readline вообще не издает звука. Если visible, Readline использует звук по возможности. Если значение переменной - audible (по умолчанию), Readline пытается издать звук.

comment-begin

Строка для вставки в начало строки, когда выполняется команда vi-comment. Значение по умолчанию - #.

meta-flag

Если присвоено значение on, включается восьмибитный ввод (не будет удаляться восьмой бит из читаемого символа), соответствия которому требует терминал. Значение по умолчанию - off.

convert-meta

Если присвоено значение on, Readline переводит символы с восьмым битом в ключевую последовательность ASCII c помощью удаления восьмого бита и использования символа ESC, переводящего их в последовательность метапрефиксных ключей. По умолчанию принимает значение on.

output-meta

Если присвоено значение on, Readline выводит символы с восьмым битом раньше, чем метапрефиксную последовательность. По умолчанию - off.

completion-query-items

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

keymap

Используется идея Readline текущей таблицы клавиш для команд, связанных с ними. Имена, принимаемые keymap: emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command и vi-insert. vi зквивалентно vi-command, еmacs emacs-standard. По умолчанию emacs. Также при умолчании keymap используется значение editing-mode.

show-all-if-ambiguous

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

expand-tilde

Если присваивается on, при попытке Readline завершить слово выполняется тильдовое расширение. По умолчанию - off.

Связи клавиш.

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

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

keyname: имя функции или макрокоманда
Кeyname - имя ключа, записанное по-английски. Например:

Control-u: universal-argument
Meta-Rubout: backward-kill-word
Control-o: ">&output"
В вышеприведенном примере 'C-u' связано с функцией universal-argument, и 'C-o' связано с выполнением макрокоманды, записанной на правой стороне (чтобы вставить текст '>&output' в строку.

keyseq: имя функции или макрокоманда.
Keyseq отличается от keyname в пределах строки, определяющей целую последовательность ключей, заключенностью последовательности ключей в двойные кавычки. Могут использоваться некоторые клавиши GNU Еmacs, как в приведенном ниже примере, но специальные символьные имена не узнаются.

"\C-u": universal-argument
"\C-x\C-r": re-read-init-file
"\e[11~": Function Key 1"
B приведенном примере 'C-u' ограничено функцией universal-argument (так же, как в первом примере), 'C-x C-r' ограничено функцией re-read-init-file, и 'ESC [1 1~' ограничено для вставки текста 'Function Key1'. Следующие escape-последовательности доступны для определения последовательностей клавиш:
\C-

control префикс

\M-

meta префикс

символ еscape

\\

backslash

\"

"

\'

'

Во время введения текста макрокоманды одинарные или двойные кавычки используются для обозначения определения макрокоманды. В тексте без кавычек подразумевается имя функции. Backslash заключает в кавычки любой символ в тексте макрокоманды, включая " и '. Например, следующая связь заключает C-x в \ в строке: "\C-x\\": "\\"

Инициализационные условные конструкции.

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

$if

Конструкция $if позволяет основывать связывания на режиме редактирования, использовать терминал или Readline. Текст теста расширяется до конца строки, и не требуется символов для его изоляции.

mode

mode= - форма директивы $if, используемая для провер ки, в каком режиме находится Readline: emacs или vi. Это можно использовать для связи с командой 'set keymap', например, для установления связей в emacs-standard и emacs-ctlx, только если Readline начинается в режиме emacs.

term

Форма term= может использоваться для включения свяэей специфических терминальных клавиш, а иногда - для связывания вывода последовательности клавиш терминальными функциональными клавишами. Слово справа от = сравнивает ся с полным именем терминала а фрагментом терминально го имени перед первым знаком -. Это, например, позво ляет sun соответствовать и sun, и sun-cmd.

application

Конструкция application позволяет включать установки, зависящие от приложений. Каждой программе, использующей библиотеку Readline, присваивается имя приложения, и вы можете это проверить. Это можно использовать для связывания последовательностей клавиш с функциями, используемыми в специфических программах. Например, ни жеприведенная команда добавляет последовательность кла виш, эаключающих в кавычки текущее или предыдущее сло во Bash:

$if bash
# Quote the current or previous word
"\C-xq": "\eb\"\ef\""
$endif
$endif

Эта команда, как видно из предыдущего примера, завершает команду $if.

$else

Команды ветви директивы $if выполняются, если тест дает ошибку.

7.4 Связываемые команды Readline.

Команды движения.

beginning-of-line (C-a)

Передвигается на начало текущей строки.

end-of-line (C-e)

Передвигается на конец текущей строки.

forward-char (C-f)

Передвигает вперед символ.

backward-char (C-b)

Передвигает символ назад.

forward-word (M-f)

Передвигается вперед до конца следующего слова. Слова состоят из букв и цифр.

backward-word (M-b)

Передвигается назад к началу зтого или предыдущего слова. Слова состоят иэ букв и цифр.

clear-screen (C-l)

Очищает экран и выводит текущую строку наверх.

redraw-current-line ()

Обновляет текущую строку. По умолчанию неограничено.

Команды для манипулирования историей.

accept-line (Newline,Return)

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

previous-history (C-p)

Передвигается вверх по списку истории.

next-history (C-n)

Передвигается вниэ по списку истории.

beginning-of-history (M-<)

Передвигается на первую строку истории.

end-of-history (M->)

Передвигается на конец ввода истории, т.е. на строку, которую вы вводите.

reverse-search-history (C-r)

Воэрастающий поиск назад от текущей строки и продвижение вверх по истории.

forward-search-history (C-s)

Возрастающий поиск вперед от текущей строки и продвижение вниз по истории.

non-incremental-reverse-search-history (M-p)

Поиск наэад от текущей строки и продвижение вверх по истории при использовании невоэрастающего поиска для применяемой строки.

non-incremental-forward-search-history (M-n)

Поиск вперед от текущей строки и продвижение вниз по истории при испольэовании невоэрастающего поиска для применяемой строки.

history-search-forward ()

Поиск вперед по истории между началом текущей строки и текущей точкой. Это невозрастающий поиск. По умолчанию команда неограничена.

history-search-backward ()

Поиск назад по истории между началом текущей строки и текущей точкой. Это невозрастающий поиск. По умолчанию команда неограничена.

yank-nth-arg (M-C-y)

Вставляет первый аргумент в предыдущую команду (обычно второе слово предыдущей строки). Если дан аргумент n, вставляет n-е слово предыдущей команды (слова в предыдущей команде нумеруются с нуля). Отрицательный аргумент вставляет n-е слово с конца предыдущей команды.

yank-last-arg (M-.,M-_)

Вставляет последний аргумент в предыдущую команду ( последнее слово предыдущей строки). Если дан аргумент, делает то же, что yank-nth-arg.

Команды изменения текста.

delete-char (C-d)

Удаляет символ на месте курсора. Если курсор на начале строки, в которой нет символов, и последний набранный символ был не C-d, то воэвращает EOF.

backward-delete-char (Rubout)

Удаляет символ эа курсором. Числовой аргумент заставляет уничтожать символ (kill) вместо его простого удаления.

duoted-insert (C-q, C-v)

Добавляет ледующий напечатанный вами символ в строку. Это помогает вставить ключевую последовательность, например C-D.

tab-insert (M-TAB)

Вставляет символ tab.

transpose-chars (C-t)

Передвигает символ перед курсором вперед за курсор, двигая курсор соответственно назад. Если место вставки - в конце строки, то переносит последние два символа строки. С отрицательными аргументами не работает.

transpose-words (M-t)

Передвигает слово за курсором назад на место слова перед курсором, двигая курсор соответственно вперед.

upcase-word (M-u)

Пишет текущее (или следующее) слово прописными буквами. При отрицательном аргументе заменяет предыдушее слово, но оставляет на месте курсор.

downcase-word (M-l)

Пишет текущее (или следующее) слово строчными буквами. При отрицательном аргументе заменяет предыдущее слово, но оставляет на месте курсор.

capitalize-word (M-c)

Делает заглавным текущее (или следующее) слово. При отрицательном аргументе делает то же самое с предыдущим словом, но оставляет на месте курсор.

Уничтожение и янкирование.

kill-line (C-k)

Уничтожает текст от текущего положения курсора до конца строки.

backward-kill-line (C-x Rubout)

Уничтожает все в направлении назад до начала строки.

unix-line-discard (C-u)

Уничтожает в направлении назад от курсора до начала текущей строки. Сохраняет уничтожаемый текст в kill-ring.

kill-whole-line ()

Уничтожает все символы на текущей строке, вне зависимости от положения курсора. По умолчанию неограничена.

kill-word (M-d)

Уничтожает символы от курсора до конца текущего слова, или между словами, до конца следующего слова. Границы слов такие же, как в forward-word.

backward-kill-word (M-DEL)

Уничтожает слово позади курсора. Границы слов такие же, как в backward-word.

unix-word-rubout (C-w)

Уничтожает слово позади курсора, используя в качестве границы слова пробел. Уничтожаемый текст сохраняется в kill-ring.

delete-horizontal-space ()

Уничтожает все пробелы и табуляции вокруг точки. По умолчанию неограничена.

yank (C-y)

Янкирует вершину kill-ring в буфер на текущую позицию курсора.

yank-pop (M-y)

Вращает kill-ring и янкирует новую вершину. Вы можете это сделать, только если предыдущая команда была yank или yank-pop.

Специфические числовые аргументы.

digit-argument (M-0, M-1, ...,M--).

Добавляет цифру к аргументу, уже собранному, или начинает новый аргумент. M- начинает отрицательный аргумент.

universal-argument()

Каждый раз при выполнении зтой команды счетчик аргумент умножается на 4. Изначально счетчик аргумента равен 1, таким об разом его следующее значение - 4. По умолчанию это не связа но с ключом.

Возможность печати Readline.

complete (TAB)

Пытается сделать завершение текста перед курсором. Это специфическая особенность приложения. В общем случае, если вы пе чатаете аргумент имени файла, вы можете сделать завершение имени файла; если вы печатаете команду, вы можете сделать завершение команды; если вы печатаете символ в GDB, вы можете сделать завершение символьного имени; если вы печатаете в переменной Bash, вы можете сделать завершение имени переменной, и т.д. Полный список доступных функций завершения см. в Bash manual page.

possible-completions (M-?)

Выводит список возможных эавершений текста перед курсором.

insert-completions ()

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

Макрокоманды клавиатуры.

start-kbd-macro (C-x()

Начинает сохранение символов, напечатанных в текущую макрокоманду клавиатуры.

end-kbd-macro (C-x ))

Прекращает сохранение символов, напечатанных в текущую макрокоманду клавиатуры, и сохраняет определение.

call-last-kbd-macro (C-x e)

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

Прочие команды.

re-read-init-file (C-x C-r)

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

abort (C-g)

Прекращает текущую команду редактирования и дает звуковой сигнал (подчиненный установке bell-style).

do-uppercase-version (M-a, M-b,...)

Выполняет команду, свяэанную с соответствующим символом передвижения вверх.

prefix-meta (ESC)

Метафирует следующий символ, который вы печатаете. предназначена для тех, у кого отсутствует клавиша meta. Набрать 'ESC f' - то же самое, что набрать 'M-f'.

undo (C-_, C-x C-u)

Возрастающая отмена, при которой отдельно запоминается каждая строка.

revert-line (M-r)

Отменяет все изменения, произведенные на зтой строке. Здесь, как и при наборе undo, достаточно времени для возвращения назад к началу.

tilde-expand (M-~)

Выполняет тильдовое расширение на текущей строке.

dump-functions ()

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

display-shell-version (C-x C-v)

Выводит информацию о версии текущего Bash.

shell-expand-line (M-C-e)

Расширяет строку, как при чтении ее оболочкой. Выполняет расширения псевдонима и истории так же, как расширения слов обо лочки.

history-expand-line (M-^)

Выполняет расширение истории на текущей строке.

insert-last-argument (M-.,M-_)

Синоним yank-last-arg.

operate-and-get-next (C-o)

Принимает текущую строку для выполнения и извлекает следующую по отношению к текущей строку из истории для редактирова ния. Все аргументы игнорируются.

emacs-editing-mode (C-e)

В режиме редактирования vi вызывает переход в режим редактирования emacs, как при выполнении команды set -o emacs.

7.5 Режим vi в Readline.

Хотя в библиотеке Readline нет полного набора функций редактирования vi, в ней достаточно средств для простого редактирования строки. Режим vi в Readline действует так же, как определенный в Posix 1003.2 стандарт.

Для диалогового перехода из режима редактирования Emacs в Vi и обратно можно использовать команды set -o emacs и set -o vi (см. раздел 4.5. "Встроенная команда set"). Readline по умолчанию находится в режиме emacs.

Когда вы вводите строку в режиме vi, вы уже находитесь в режиме "вставки", как если бы вы нажали 'i'. Нажатие ESC переводит вас в режим "команды", в котором вы можете редактировать текст строки с помощью стандартных клавиш движения режима vi: перемещаться к предыдущим строкам истории, используя 'k', к следующим - 'j' и т.д.


Вперед Назад Содержание