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

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


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

Выпуск 49

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

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

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


bash(1)

    Добавление перенаправленного вывода

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

Перенаправление вывода на добавление имеет следующий общий вид:

[n]>>слово

    Перенаправление стандартного выходного потока и стандартного потока ошибок

Командный интерпретатор bash позволяет перенаправить как стандартный выходной поток (дескриптор файла 1), так и стандартный поток ошибок (дескриптор файла 2) в файл, имя которого получается в результате подстановок в слове.

Для этого предлагается два формата конструкции перенаправления:

&>слово
и
>&слово

Первый формат является предпочтительным. Эта конструкция семантически эквивалентна следующей:

>слово 2>&1

    Конструкция "документ здесь"

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

Конструкция "документ здесь" имеет следующий формат:

 
<<[-]слово 
        документ-здесь 
ограничитель 

В слове не выполняется подстановка значений параметров, результатов выполнения команд, имен файлов или вычисление арифметических выражений. Если в слове есть замаскированный символ, ограничитель является результатом удаления символов маскировки из слова. Если в слове нет замаскированных символов, во всех строках "документа здесь" выполняется подстановка значений параметров, результатов выполнения команд и вычисление арифметических выражений. В этом случае пара \<перевод строки> игнорируется, и необходимо использовать \ для маскировки символов \, $ и `.

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

Оператор перенаправления

[n]<&слово

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

Оператор

[n]>&слово

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

    Открытие дескрипторов файлов для чтения и записи

Оператор перенаправления

[n]<>слово

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

ПСЕВДОНИМЫ

Псеводнимы позволяют подставлять вместо первого слова простой команды строку. Командный интерпретатор поддерживает список псевдонимов, которые можно устанавливать и удалять с помощью встроенных команд alias и unalias (см. раздел "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже). Первое слово каждой команды, если оно не взято в кавычки, ищется в списке псевдонимов. Если соответствующий псевдоним найден, слово заменяется текстом псевдонима. Имя псевдонима и подставляемый текст может включать любые допустимые входные данные для командного интерпретатора, включая перечисленные ранее метасимволы. Единственное исключение - имя псевдонима не может содержать знак =. Первое слово текста псевдонима также ищется в списке псевдонимов, но если оно совпадает с именем подставляемого псевдонима, повторной подстановки не происходит. Это означает, что можно задать псевдоним ls для ls -F, например, и bash не будет пытаться выполнять рекурсивные подстановки в тексте псевдонима. Если последний символ текста псевдонима - пробел, следующее за псевдонимом слово исходной команды также ищется в списке псевдонимов и, если найдено, заменяется.

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

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

Псевдонимы не подставляются, если командный интерпретатор не является интерактивным, если только с помощью встроенной команды shopt не установлена опция expand_aliases (см. описание команды shopt ниже, в разделе "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА").

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

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

ФУНКЦИИ

Функция командного интерпретатора, определенная как было представлено ранее в разделе "СИНТАКСИС КОМАНД", сохраняет под заданным именем последовательность команд для выполнения в дальнейшем. Функции выполняются в контексте текущего командного интерпретатора; для их интерпретации не создается новый процесс (сравните с выполнением сценария команжного интерпретатора). При вызове функции ее аргументы становятся позиционными параметрами. Специальный параметр # обновляется, отражая это изменение. Позиционный параметр 0 не изменяется. Все остальные особенности среды выполнения командного интерпретатора у функции и вызывающей ее команды идентичны, только обработчик сигнала DEBUG (см. описание встроенной команды trap в разделе "ВСТРОЕННЫЕ КОМАНДЫ ИНТЕРПРЕТАТОРА" ниже) не наследуется.

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

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

Имена и определения функций можно получить с помощью опции -f встроенных команд declare или typeset. С опцией -F встроенные команды declare и typeset будут выдавать только имена функций. Функции можно экспортировать, с помощью опции -f встроенной команды export, так что они будут автоматически определены в порожденных командных интерпретаторах.

Функции могут быть рекурсивными. Глубина рекурсии не ограничена.

ВЫЧИСЛЕНИЕ АРИФМЕТИЧЕСКИХ ВЫРАЖЕНИЙ

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

- +
унарные минус и плюс
! ~
логическое и побитовое отрицание
**
возведение в степень
* / %
умножение, деление, получение остатка от деления
+ -
сложение, вычитание
<< >>
побитовый сдвиг влево и вправо
<= >= < >
сравнение
== !=
равенство и неравенство
&
побитовое И
^
побитовое исключающее ИЛИ
|
побитовое ИЛИ
&&
логическое И
||
логическое ИЛИ
выражение?выражение:выражение
условное вычисление
= *= /= %= += -=
присваивание

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

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

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

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

Очередная часть справочного руководства по bash(1). Выпуск ожидается в понедельник, 13 мая.

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

  В.К.



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

В избранное