В этой главе описаны возможности, уникальные для Bash.
Кроме односимвольных опций командной строки оболочки (см. раздел 4.5.), есть несколько мультисимвольных опций, которые можно использовать. Для того, чтобы быть узнанными, эти опции должны появляться на командной строке перед односимвольными опциями.
Не читает инициализацию файла '~/.bashrc' в диалоговой оболочке. Это по умолчанию, если оболочка вызывается как sh.
Выполняет команды из файла имя_файла (вместо '~/.bashrc') в диалоговой оболочке.
Не загружает файл начальных действий системы '/etc/profile' или любой из файлов персональной инициализации '~/.bash-profile' ,'~/bash-login' или '~/.profile', когда Bash вызывается как login.
выводит номер версии оболочки.
включает оболочку, как если бы она вызывалась с login. Это эквивалентно 'exec - bash', но может происходить из другой оболочки, такой как csh. Если вы хотите заменить вашу текущую входную оболочку Bash, вы должны набрать 'exec bash -login'.
Не выполняет brace-расширение (см. раздел 2.2).
Не использует библиотеку GNU (СМ. главу 7 "Редактирование командной строки") для чтения диалоговых командных строк.
Изменяет поведение Bash в соответствии со стандартом Posix 1003.2, когда операция по умолчанию отличается от этого стандарта. Это предназначено для того, чтобы строго подчинить Bash стандарту.
Читает и выполняет команды со строки после выполнения опций, затем выходит.
Заставляет оболочку выполнять команды в интерактивном режиме.
Если есть этот флаг, или после обработки опций не осталось аргументов, то команды считываются со стандартного ввода. Эта опция позволяет устанавливать позиционные параметры при вызове диалоговой оболочки.
Когда и как 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 расширяется, и этот файл используется в качестве источника; другие файлы начальных действий не считываются.
Может возникнуть ситуация, что хочется определить внутри сценария начальных действий, выполняется bash в диалоговом режиме или нет. Для того, чтобы это сделать, нужно проверить переменную $PS1 - она задана в диалоговых оболочках и не задана в недиалоговых.
Таким образом:
if [-z "$PS1"]; then
echo Эта оболочка недиалоговая
else
echo Эта оболочка диалоговая
fi
Вы можете заставить диалоговый Bash не выполнять ваш файл
'~/.bashrc' с флагом -norc, можете изменить имя файла '~/.bashrc' на
любое другое имя файла с помощью имени -rcfile, и можете заставить
Bash не выполнять ваш файл '~/.bash_profile' с флагом -nonprofile.
В этом разделе описаны встроенные команды, уникальные для Bash или расширенные в нем.
builtin [встроенная_команда_оболочки [аргументы]]
Выполняет встроенную команду оболочки. Это используется,
когда вы хотите заменить встроенную команду оболочки
функцией, но нужна функциональность встроенной команды
внутри самой функции.
bind [-m таблица_ключей] [-lvd] [-q имя]
bind [-m таблица_ключей] -f имя_файла
bind [-m таблица_ключей] последовательность_ключей:имя_функции
Изображает ключ текущего Readline (см. главу 7
"Редактирование командной строки") и связи функций, или
компонует последовательность ключей в функцию Readline или
макрофункцию. Введенный скомпонованный синтаксис идентичен
синтаксису '.inputrc' (см. раздел 7.3.), но каждая связь
должна быть передана как отдельный
аргумент:'"\C-x\C-r":re-read-init-file'. Если используются
опции, они имеют следующие значения:
Используется таблица_ключей как таблица ключей, на которую должны влиять последующие связывания: имена таблицы ключей, которые могут введены emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command и vi-insert. vi эквивалентно vi-command, emacs эквивалентно emacs-standard.
Перечисляет имена всех функций чтения строки.
Перечисляет текущие имена функций и свяэывания.
Сбрасывает имена функций и присваивания так, чтобы их можно было перечитывать.
Считывает присваивания ключей файла с именем имя_файла.
Запрос о том, какие ключи вызывают названную функцию.
command[-pVv] команда [аргументы...]
Выполняет команду с аргументом, пропуская функции оболочки.
Если у вас есть функция оболочки с именем ls и вы хотите
назвать так же команду, вы говорите 'command ls'. Опция -p
осуществляет использование переменной по умолчанию для
$PATH, что гарантирует нахождение всех стандартных сервисных программ.
Если обеспечиваются и опция -V, и опция -v, то выдается описание "команды". Опция -v вызывает одно слово, указывающую на команду или имя файла, использованные для вызова "ко манды", которую нужно вывести; опция -V вызывает более мно гословное описание.
declare [-frxi] [имя[=значение]]
Объявляет переменные и/или дает им атрибуты. Если не даны
имена, вместо них выводятся значения переменных. -f значит
использование только имен функций. -r говорит, что имена
должны только читаться. -x отмечает имена для экспорта. -i
рассматривает переменную как целое число; арифметическое вычисление (см. раздел 4.7) выполнено, когда переменной прис воено значение. При использовании + вместо - удаляется заме щающий атрибут. Использование функции declare делает имена
локальными, как при помощи команды local.
enable [n] [-a] [имя...]
Включает и выключает команды оболочки. Это позволяет ис пользовать команду диска, имеющую то же имя, что и встроен ная команда оболочки. Если используется n, то "имена" стано вятся запрещенными. В противном случае имена вводятся в дей ствие. Например, чтобы использовать бинарный поиск test с
помощью $PATH вместо встроенной команды оболочки, нужно
ввести 'enable -n test'. Опция -a предназначена для занесения в список каждой встроенной команды с пометкой, включена
она или нет.
help [шаблон]
Выводится вспомогательная информация о встроенных командах.
Если определен шаблон, help дает подробную информацию о всех
командах, совпадающих с шаблоном, в противном случае выводится список встроенных команд.
local имя[=значение]
Для каждого аргумента создается локальная переменная под
названием "имя" и ей дается "значение". local может использоваться только внутри функции: он заставляет перемен ную иметь видимый контекст, ограниченный этой функцией и ее
потомками.
type [-all] [-type | -path] [имя...]
Для каждого "имени" помечает, как оно должно интерпретиро ваться при использовании имени команды. Если используется
флаг type, type возвращает единственное слово - "alias",
"function", "builtin", "file", или "keyword", если имя псевдоним, функция оболочки, встроенная команда оболочки,
дисковый файл или зарезервированное оболочкой слово соответственно. Если используется флаг -path, type возвращает имя
дискового файла, или ничего, если type не должен возвратить
"file". Если используется флаг -all, возвращаются все места,
содержащие выполнимый названный файл. Псевдонимы и функции
включаются если и только если флаг -path также не использует ся.
ulimit [acdmstfpnuvSH] [предел]
Ulimit проводит контроль за источниками, используемыми для
начальных процессов в оболочке,в системах, которые допускают
такой контроль. Если дана опция, она интерпретируется следующим образом:
изменяет и сообщает гибкий предел, связанный с источником (по умолчанию, если не дана опция -H).
изменяет и сообщает твердый предел, связанный с источником.
сообщает все текущие пределы.
максимальный размер созданного файла оперативной памяти.
максимальный размер сегмента данных процесса.
максимальный размер резидентного набора.
максимальный размер стека.
максимальное время cpu в секундах.
максимальный размер файла, созданного оболочкой.
максимальный размер канального буфера.
максимальное число открытых файловых дескрипторов.
максимальное число процессов, доступных отдельному пользователю.
максимальное количество виртуальной памяти, доступное процессу.
Зта встроенная команда настолько перегружена, что ей посвящается целый раздел.
set [abefhkmnptuvxldCHP] [-o опция] [аргумент]
отмечает переменные, которые модифицированы или созданы для зкспорта.
вызывает прекращение фоновых заданий, о котором сообщает перед выводом следующего базового приглашения.
немедленный выход, если выходное состояние команды ненулевое.
выключает генерацию имени файла (глоббирование).
обнаруживает и запоминает (хеширует) команды как определенные функции до того, как функция будет выполнена.
В окружении команды располагаются все аргументы ключевых слов, не только те, которые предшествуют имени команды.
Разрешается управление заданиями (см. главу 5).
Читает команды, но не выполняет их.
Устанавливает флаг, соответствующий имени_опции.
то же, что -а.
оболочка должна выполнить brace-расширение (см. раздел 2.2).
использует интерфейс редактирования emacs (см. главу 7 "Редактирование командной строки").
то же, что -е.
то же, что -Н.
оболочка не выходит при чтении EOF.
позволяет вызывать слово, начинающееся с '#', и все оставшиеся символы на этой строке игнорировать в диа логовой оболочке.
то же, что -m.
то же, что -C.
то же, что -n.
то же, что -f.
то же, что -d.
то же, что -b.
то же, что -u.
то же, что -P.
изменяет режим Bash в соответствии со стандартом Posix 1003.2, когда операция по умолчанию отличается от него. Предназначен для того, чтобы сделать режим строго подчиненным зтому стандарту.
то же, что -p.
то же, что -v.
использует интерфейс редактирования строки редактора vi.
то же, что -x.
Включает привилегированный режим. В зтом режиме файл $ENV не выполняется, и функции оболочки не наследуются из среды. Зто включается автоматически начальными действиями, если идентификатор зффективного пользователя (группы) не равен идентификатору реального пользователя (группы). Выключение зтой опции присваивает идентификатор зффективного пользователя (группы) идентификатору реального пользователя (группы).
выход после чтения и выполнения команды.
во время замещения рассматривает незаданную переменную как ошибку.
выдает строки ввода оболочки по мере их считывания.
выводит команды и их аргументы по мере выполнения команд.
сохраняет и восстанавливает связывание имени в команде for.
Выключает хеширование команд, найденных для выполнения. Обычно команды запоминаются в хеш-таблице и, будучи однажды найденными, больше не ищутся.
не позволяет существующим файлам перенаправление вывода.
закрывает замену стиля ! истории. Этот флаг принимается по умолчанию.
Если установлена, не следует символьному указателю при выполнении команды типа cd, которая изменяет текущий каталог. Вместо этого используется физический каталог.
Если нет аргументов, следующих за зтим флагом, то не задаются позиционные параметры. В противном случае позиционные параметры присваиваются аргументам, даже если некоторые из них начинаются с а-.
Сигнал конца опции, вызывающей присваивание оставшихся аргументов позиционным параметрам. Опции -x и -v выключаются. Если здесь нет аргументов, позиционный параметр не изменяется.
Эти переменные задаются и используются Bash, но в других оболочках обычно специально не рассматриваются.
При присвоении значения 'ignorespace' строки, начинающиеся с пробела или табуляции, не вводятся в список истории. При присвоении значения 'ignoredups' строка, соответствующая прошлой введенной строке, не вводится. 'ignoreboth' сочетает эти две опции. Присвоение любого другого значения обозначает сохранение всех строк в списке "истории".
Имя файла, хранящего команду истории.
Если задана, это максимальное число команд, которые должны быть запомнены в истории.
Восходит к трем символам, контролирующим расширение истории, быстрое замещение и лексемизацию (см. раздел 6.1 "Диалог истории"). Первый символ - символ расширения истории, обозначающий начало расширения истории - обычно '!'. Второй обозначает быструю замену при нахождении первого символа на строке, обычно '^'. Опционный третий символ помечает остаток строки - комментарий, когда он найден как первый символ слова, обычно '#'. Символ комментария истории вызывает замену истории, игнорируемую для оставшихся слов на строке. Не обязательно вызывает синтаксический разбор оболочки для рассмотрения остатка строки как комментария.
Номер истории или индекс списка истории текущей команды. Если HISTCMD не задана, она теряет свои специальные свойства, даже если впоследствии она опять задается.
Содержит имя файла в том же формате, что и '/etc/hosts', которое должно считываться, когда оболочке нужно завершить hostname. Вы можете иэменить файл в диалоговом режиме. В следующий раз, когда вы попытаетесь завершить hostname, Bash добавит содержание файла к уже существующей базе данных.
Показывает, как часто (в секундах) оболочка должна проверять файлы, указанные в MAILPATH, на наличие почты.
Если есть, содержит строку с командой для выполнения перед выводом каждой базовой команды приглашения ($PS1).
Числовой идентификатор реального пользователя для текущего пользователя.
Числовой идентификатор зффективного пользователя для текущего пользователя.
Строка, описывающая машину, на которой запущен Bash.
Cтрока, описывающая операционную систему, в которой запущен Bash.
Разделенный двоеточиями список суффиксов, игнорируемых при завершении имени файла. Имя файла, чей суффикс соответствует одному из приведенных в FIGNORE, извлекается из списка соответствующих имен файлов. Образцовое значение - '.o:~'.
Имя файла начальных действий Readline, заменяемое по умолчанию на '~/.inputrc'.
Имя версии текущего зкземпляра Bash.
Контролирует получение символа EOF оболочкой в отдельном вводе. Если задана, то ее значение - число последовательных символов EOF, которые могут быть считаны как первые символы строки ввода перед выходом из оболочки. Если переменная существует, но не имеет числового значения, то по умолчанию зто 10. Если переменная не существует, EOF отмечает конец ввода в оболочку. Действует только в диалоговых оболочках.
Если эта переменная существует, то оболочка не выходит, если она не может выполнить файл, указанный в команде exec.
Если есть, говорит о том, что не нужно следовать символическим указателям в командах, изменяющих текущий рабочий каталог. По умолчанию 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.
Оболочка позволяет вычислять арифметические выражения как одно из расширений оболочки или с помощью встроенной команды let.
Вычисления производятся в longint без проверки на переполнение, хотя деление на 0 прерывается и отмечается как ошибка. Нижеследующий список операторов сгруппирован по уровням равноприоритетных операторов. Уровни располагаются в порядке уменьшения приоритета.
унарные минус и плюс
логическое и поразрядное отрицания
умножение, деление, остаток
сложение и вычитание
левый и правый поразрядные сдвиги
сравнение
равенство и неравенство
поразрядное И
поразрядное исключительное ИЛИ
поразрядное ИЛИ
логическое И
логическое ИЛИ
распределение по приоритету.
Переменные оболочки допустимы как операнды; параметрическое расширение выполняется перед вычислением выражения. Значение параметра внутри выражения обязательно longint. Переменная оболочки не обязана иметь целый атрибут, включаемый в выражение.
Константы, начинающиеся с 0, интерпретируются как восьмиричные числа. Начало 0x или 0X обозначает шестнадцатиричное число. Кроме того, числа в форме [основание#]n, когда основание - десятичное число от 2 до 36, представляющее арифметическое основание системы счисления, а n - число в зтой системе. Если основание не указано, подразумевается 10.
Операторы вычисляются в порядке приоритета. Субвыражения в круглых скобках вычисляются первыми и могут не подчиняться правилам приоритета.
Арифметическое расширение позволяет вычислять арифметические выражения и подставлять результат. Существуют два формата арифметического расширения:
$[ выражение ]
$(( выражение ))
Выражение рассматривается, как если бы оно было заключено в двойные
кавычки, но двойные кавычки внутри фигурных или круглых скобок специально не рассматриваются. Все лексемы в выражении подвергаются параметрическому расширению, командному замещению и устранению кавычек.
Арифметические подстановки могут вкладываться одна в другую.
Вычисление выполняется согласно вышеуказанным правилам. Если выражение некорректно, Bash выдает сообщение, обозначающее сбой, и замещение невозможно.
let выражение [выражение]
Встроенная команда let позволяет выполнять арифметические
действия над переменными оболочки. Каждое выражение вычисляется согласно приведенным ранее правилам (см. раздел
4.7.1). Если последнее вычисление равно 0, let возвращает 1,
в противном случае - 0.
Значение переменной $PROMPT_COMMAND проверяется непосредственно перед выдачей Bash каждого базового приглашения. Если оно задано и не ноль, то значение выводится, как если бы оно было напечатано на командной строке.
Приведенная таблица описывает специальные символы, которые могут появляться в переменной PS1:
время в формате часы: минуты: секунды.
Дата в формате день_недели месяц число.
перевод строки.
имя оболочки, базовое имя $0 (участок, следующий за конечным /)
текущий рабочий каталог
базовое имя $PWD
имя пользователя, под которым вы эарегистрированы
hostname
номер зтой команды
номер истории зтой команды
символ, соответствующий восьмиричному числу nnn
если зффективный uid=0, то #, иначе $.
обратная косая черта (backslash)
начало последовательности невыводимых символов. Может использоваться для осуществления управления терминалом в приглашении.
конец последовательности невыводимых символов.