Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Страницы справочного руководства ОС UNIX на русском man bash(1), часть 10


Информационный Канал Subscribe.Ru

Выпуск 51

man bash(1), часть десятая

Уважаемые подписчики! Этот выпуск - десятый в серии, посвященной командному интерпретатору bash. Половина справочного руководства bash переведена! Перевод закончен вчера, 26 мая.

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


bash(1)

БИБЛИОТЕКА READLINE

Это библиотека, обрабатывающая входные данные при работе командного интерпретатора в интерактивном режиме, если при его вызове не была указана опция --noediting. По умолчанию, команды редактирования строки подобны используемым в редакторе emacs. Также предоставляется интерфейс для редактирования командной строки в стиле редактора vi. Для отключения возможности редактирования после запуска командного интерпретатора используются опции +o emacs или +o vi встроенной команды set (см. раздел "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже).

    Соглашения по записи команд readline

В этом разделе для записи нажимаемых клавиш используются соглашения в стиле редактора emacs. Управляющие клавиши обозначаются C-клавиша, так что C-n сокращенно обозначает Control-N. Аналогично, метаклавиши обозначаются M-клавиша, так что M-x обозначает Meta-X. (На клавиатурах, где нет клавиши meta, M-x обозначает ESC x, т.е. нажать клавишу Escape и затем нажать клавишу x. Тем самым, клавиша ESC реализует префикс meta. Комбинация M-C-x обозначает ESC-Control-x, или нажать клавишу Escape, затем, удерживая клавишу Control, нажать клавишу x.)

Команды библиотеки readline могут иметь числовые аргументы, обычно обозначающие количество повторений. Иногда, однако, они являются признаком значимости аргумента. Передача отрицательного аргумента команде, работающей с дальнейшим текстом (например, kill-line) приводит к ее применению к предшествующему тексту. Команды, работа которых отличается от описанной здесь, специально отмечены ниже.

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

    Инициализация библиотеки readline

Библиотека readline настраивается с помощью команд в инициализационном файле (файл inputrc). В качестве имени этого файла берется значение переменной INPUTRC. Если эта переменная не установлена, используется стандартный файл, ~/.inputrc. При запуске программы, использующей библиотеку readline, инициализациооный файл читается и устанавливаются соответствующие переменные и горячие клавиши. В файле инициализации readline допускаются лишь несколько простых конструкций. Пустые строки игнорируются. Строки, начинающиеся символом #, являются комментариями. Строки, начинающиеся символом $, обозначают условные конструкции. Остальные строки обозначают установки горячих клавиш и присваивания значений переменным.

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

Например, поместив в файл инициализации

M-Control-u: universal-argument
или
C-Meta-u: universal-argument

мы привязываем к комбинации клавиш M-C-u команду universal-argument библиотеки readline.

Распознаются следующие имена символов: RUBOUT, DEL, ESC, LFD, NEWLINE, RET, RETURN, SPC, SPACE и TAB. Кроме имен команд, библиотека readline позволяет привязывать к клавишам строки, которые будут вставляться при их нажатии (т.е. задвать макроподстановки).

    Горячие клавиши readline

Привязки клавиш в файле inputrc задаются с помощью простого синтаксиса. Необходимо указать только имя команды или текст макроподстановки, и горячие клавиши, с которыми его надо связать. Горячие клавиши можно задавать двумя способами: как символическое имя клавиши, возможно, с префиксом Meta- или Control-, или как комбинацию клавиш. При использовании формы имя_клавиши:имя_функции или макроподстановка, имя_клавиши просто задается на английском. Например:

Control-u: universal-argument
Meta-Rubout: backward-kill-word
Control-o: "> output"

В этом примере комбинация клавиш C-u связывается с функцией universal-argument, M-DEL - с функцией backward-kill-word, а C-o - с макроподстановкой, указанной в правой части (т.е. приведет к вставке текста > output в строку).

Во второй форме, "комбинация_клавиш":имя_функции или макроподстановка, комбинация клавиш отличается от использованного выше имени клавиши тем, что может задаваться в двойных кавычках. При этом можно использовать некоторые управляющие символы в стиле GNU Emacs, как в следующем примере.

"\C-u": universal-argument
"\C-x\C-r": re-read-init-file
"\e[11~": "Function Key 1"

В этом примере, комбинация клавиш C-u опять связывается с функцией universal-argument. Комбинация C-x C-r связывается с функцией re-read-init-file, а комбинация ESC [ 1 1 ~ будет приводить к вставке текста Function Key 1. Полный набор управляющих последовательностей в стиле GNU Emacs представлен ниже

\C- префикс клавиши Control
\M- префикс клавиши Meta
\e управляющий символ
\\ обратная косая
" \" символ "
\' символ '

Помимо управляющих последовательностей в стиле GNU Emacs, имеется еще один набор управляющих последовательностей, начинающихся с обратной косой:

\a предупреждение (звонок)
\b забой (backspace)
\d удаление символа (delete)
\f перевод страницы (form feed)
\n новая строка
\r возврат каретки
\t горизонтальная табуляция
\v вертикальная табуляция
\nnn символ, ASCII-код которого имеет восьмеричное значение nnn (от одной до трех цифр)
\xnnn символ, ASCII-код которого имеет щестнадцатеричное значение nnn (от одной до трех цифр)

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

Командный интерпретатор bash позволяет просмотреть или изменить текущие горящие клавиши библиотеки readline с помощью встроенной команды bind. Режим редактирования можно переключать в ходе интерактивной работы с помощью опции -o встроенной команды set (см. раздел "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже).

    Переменные readline

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

set имя_переменной значение

За исключением явно указанных случаев, переменные readline могут иметь значения On или Off. Ниже представлены эти переменные и их стандартные значения:

bell-style (audible)
Управляет тем, что происходит, когда библиотека readline должна выдать звонок (звуковой сигнал) терминала. Если задано значение none, readline никогда не выдает звуковой сигнал. Если задано значение visible, readline использует визуальный сигнал, если он поддерживается терминалом. Если задано значение audible, readline пытается выдать звуковой сигнал терминала.
comment-begin ("#")
Строка, вставляемая при выполнении команды insert-comment библиотеки readline. Эта команда привязана к клавишам M-# в режиме emacs и к клавише # в режиме vi.
completion-ignore-case (Off)
Если установлено значение On, библиотека readline выполняет подстановку имен файлов и дополнение командной строки с учетом регистра.
completion-query-items (100)
Определяет, когда у пользователя запрашивают подтверждение выдачи всех завершений команды, генерируемых командой possible-completions. Можно задавать любое неотрицательное целочисленное значение. Если количество возможных завершений больше или равно значению этой переменной, у пользователя запрашивают, желает ли он все их увидеть; иначе они просто выдаются на терминал.
convert-meta (On)
Если установлено значение On, readline будет преобразовывать символы с установленным восьмым битом в последовательность символов ASCII путем сброса восьмого бита и добавления управляющего символа (фактически, используя управляющий символ как мета-префикс).
disable-completion (Off)
Если установлено значение On, readline не будет выполнять завершение слов. Символы завершения будут вставляться в строку буквально.
editing-mode (emacs)
Управляет тем, с каким набором горячих клавиш начинает работать библиотека readline - анаголичным emacs или vi. Переменная editing-mode может иметь значения emacs или vi.
enable-keypad (Off)
Если установлено значение On, readline будет пытаться включить поддержку цифрового блока клавиатуры справа при вызове. Некоторым системам это необходимо для поддержки калвиш со стрелками.
expand-tilde (Off)
Если установлено значение On, при попытке завершеная слов выполняется замена тильды.
horizontal-scroll-mode (Off)
Если установлено значение On, readline будет использовать одну строку для показа, прокручивая ее при необходимости с одной строке, когда ее длина превышает ширину экрана, а не перенося визуально на новую строку.
input-meta (Off)
Если установлено значение On, readline будет поддерживать ввод восьмибитовых символов (т.е. не будет сбрасывать старший бит символов при чтении), независимо от того, поддерживает ли восьмибитовые символы терминал. Имя meta-flag - синоним для данной переменной.
isearch-terminators ("C-[C-J")
Строка символов, которые должны прекращать инкрементный поиск без последующего выполнения символа как команды. Если значение этой переменной не задано, инкрементный поиск будут прекращать клавиши ESC и C-J.
keymap (emacs)
Устанавливает текущую раскладку горячих клавиш для readline. Допускаются имена раскладок emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-command и vi-insert. vi эквивалентно vi-command; emacs эквивалентно emacs-standard. Стандартное значение - emacs; значение переменной editing-mode также влияет на горячие клавиши.
mark-directories (On)
Если установлено значение On, к завершенным именам каталогов добавляется косая черта.
mark-modified-lines (Off)
Если установлено значение On, перед строками списка истории команд, которые были изменены, выдается звездочка (*).
output-meta (Off)
Если установлено значение On, readline будет выдавать символы с установленным восьмым битом непосредственно, а не как управляющую последовательность, начинающуюся метасимволом.
print-completions-horizontally (Off)
Если установлено значение On, readline будет выдавать возможные завершения отсортированные в алфавитном порядке по горизонтали, в строках, а не по вертикали, в столбцах.
show-all-if-ambiguous (Off)
Изменяет стандартное поведение функций завершения. Если установлено значение On, для слов, имеющих более одного возможного завершения, список возможных выдается сразу, а не после звукового сигнала.
visible-stats (Off)
Если установлено значение On, к именам файлов при выдаче возможных завершений добавляется символ, задающий их тип в соответствии с функцией stat(2).

    Управляющие конструкции readline

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

$if
Конструкция $if позволяет назначать те или иные клавиши в зависимости от используемого режима редактирования, тип терминала или приложения, использующего библиотеку readline. Текст условия продолжается до конца строки - никакие завершающие символы не нужны.
mode
Форма mode= директивы $if используется для проверки того, работает ли библиотека readline в режиме emacs или vi. Ее можно использовать совместно с командой set keymap, например, для установки горячих клавиш стандарта emacs и раскладки emacs-ctlx только если readline запускается в режиме emacs.
term
Форма term= может использоваться для включения специфических горячих клавиш для данного терминала, в частности, для привязки последовательностей символов к функциональным клавишам терминала. Слово справа от символа = сравнивается с полным именем терминала и и частью имени терминала до первого вхождения -. Это позволяет задавать, например, sun для сопоставления как с , так и с sun-cmd.
приложение
Конструкция приложение используется для включения специфических настроек приложения. Каждая программа, использующая библиотеку readline, устанавливает имя приложения, а в инициализационном файле можно проверять установку определенного значения. Это можно использовать для привязки клавиш к функциям, существенным для конкретной программы. Например, следующая команда задает последовательность клавиш, бурущую в кавычки текущее или предыдущее слово в Bash:
$if Bash
# Взять в кавычки текущее или предыдущее слово
"\C-xq": "\eb\"\ef\""
$endif
$endif
Эта команда, как видно по предыдущему примеру, завершает команду $if.
$else
Команды в этой ветке директивы $if выполняются, если не выполнено условие проверки.
$include
Эта директива принимает в качестве аргумента имя файла и читает команды и привязки клавиш из этого файла. Например, следующая директива требует прочитать файл /etc/inputrc:
$include /etc/inputrc

    Поиск

Библиотека readline предлагает команды для поиска в списке истории команд (см. раздел "ИСТОРИЯ ВЫПОЛНЕНИЯ КОМАНД" ниже) строк, содержащих определенную подстроку. Имеется два режима поиска: инкрементный и не инкрементный.

Инкрементные поиски начинаются прежде, чем пользователь закончит ввод искомой строки. Привводе каждого символа искомой строки, readline выдает следующую запись из списка истории, соответствующую уже набранной подстроке. При инкрементном поиске достаточно ввести ровно столько символов, сколько надо для нахождения интересующей команды. Символы значения переменной isearch-terminators используются для завершения инкрементного поиска. Если значение этой переменной не задано, инкрементный поиск прерывается клавишами Escape и Control-J. Нажатие Control-G прерывает инкрементный поиск и восстанавливает исходную строку. При завершении поиска, запись из списка истории, содержащая строку поиска, становится текущей строкой. Для поиска других соответствующих записей в списке истории, нажмите Control-S или Control-R, в зависимости от направления поиска. В результате, будет выполнен поиск в обратном или прямом направлении следующей записи, соответствующей уже набранному фрагменту строки. Ввод любой другой последовательности символов, привязанной к команде библиотеки readline, приводит к завершению поиска и выполнению команды. Например, нажатие клавиши Enter завершит поиск и выполнит выбранную команду из списка истории.

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

В следующем выпуске

Что-нибудь по UnixWare 2.03. Думаю, выпустить таки страницы, посвященные службе NFS. Выпуск ожидается завтра, 28 мая.

С наилучшими пожеланиями,

  В.К.



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное