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

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


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

Выпуск 51

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

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

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


bash(1)

СРЕДА

При вызове программы ей передается массив строк, который называют средой. Это список пар имя-значение вида name=value.

Командный интерпретатор позволяет манипулировать средой несколькими способами. При вызове командный интерпретатор просматривает свою среду и создает одноименный параметр для каждого имени, автоматически экспортируя его для порожденных процессов. Выполняемые команды наследуют среду. Команды export и declare -x позволяют добавлять и удалять параметры и функции из среды. Если значение параметра, входящего в среду, изменено, новое значение становится частью среды, заменяя старое. Среда, наследуемая выполняемой командой, состоит из начальной среды командного интерпретатора, значения которой могли быть изменены в ходе его работы, за исключением пар, удаленных с помощью команды unset, и новых параметров, добавленных с помощью команд export и declare -x.

Среда для любой простой команды или функции может быть временно дополнена путем задания перед именем присваиваний параметрам, как описано ранее в разделе "ПАРАМЕТРЫ". Эти операторы присваивания влияют только на среду вызываемой команды.

Если установлена опция -k, (см. описание встроенной команды set ниже), то все параметры с присвоенными при вызове значениями, а не только предшествующие имени команды, помещаются в ее среду.

Когда командный интерпретатор bash вызывает внешнюю команду, переменная _ устанавливается равной полному имени файла команды и передается этой команде в среде.

СТАТУС ВЫХОДА

С точки зрения командного интерпретатора, команда, завершившаяся со статусом выхода 0, сработала успешно. Статус выхода 0 означает успешное завершение. Ненулевой статус выхода означает неудачу. Если работа команды прервана сигналом, командный интерпретатор bash использует в качестве статуса выхода значение 128+сигнал.

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

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

Встроенные команды интерпретатора возвращают статус 0 (истина) при успешном выполнении, и ненулевой статус (ложь), если при выполнении произошла ошибка. При некорректном использовании все встроенные команды возвращают статус 2.

Сам командный интерпретатор bash возвращает статус выхода последней выполненной команды, если только не обнаруживает синтаксическую ошибку. В этом случае он завершает работу с ненулевым статусом. См. также описание встроенной команды exit ниже.

СИГНАЛЫ

Когда командный интерпретатор bash работает в интерактивном режиме, при отсутствии обработчиков сигналов, он игнорирует сигнал SIGTERM (так что команда kill 0 не прекращает работу интерактивного командного интерпретатора), а сигнал SIGINT перехватывается и обрабатывается (так, что встроенная команда wait им не прерывается). Во всех случаях, bash игнорирует сигнал SIGQUIT. Если действует управление заданиями, bash игнорирует сигналы SIGTTIN, SIGTTOU и SIGTSTP.

У синхронных заданий, запущенных командным интерпретатором bash, устанавливаются обработчики сигналов, унаследованные командным интерпретатором от родительского процесса. Если управление заданиями не действует, асинхронные команды также игнорируют сигналы SIGINT и SIGQUIT. Команды, выполняемые для подстановки результатов выполнения, игнорируют сигналы управления заданиями SIGTTIN, SIGTTOU и SIGTSTP, посланные с клавиатуры.

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

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

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

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

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

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

[1] 25647

показывающую, что это задание с номером 1, а идентификатор последнего процесса в конвейере, связанном с данным заданием - 25647. Все процессы в одном конвейере являются частями одного задания. Командный интерпретатор bash использует понятие задания как основу для управления заданиями.

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

Если операционная система, в которой работает bash, поддерживает управление заданиями, bash позволяет его использовать. При нажатии клавиши приостановки (обычно ^Z, Control-Z) по ходу работы процесса, этот процесс останавливается и управление возвращается командному интерпретатору bash. При нажатии клавиши отложенной приостановки (обычно ^Y, Control-Y) процесс останавливается при попытке чтения данных с терминала, и управление возвращается командному интерпретатору bash. Затем пользователь может управлять состоянием этого задания, используя команду bg для его продолжения в фоновом режиме, команду fg - для продолжения в приоритетном режиме или команду kill для его прекращения. Нажатие ^Z срабатывает немедленно и имеет дополнительный побочный эффект в виде сброса данных, ожидающих вывода и ввода.

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

Для перевода задания в приоритетный режим достаточно ввести только его имя: %1 - это синоним для команды "fg %1", переводящей задание 1 из фонового в приоритетный режим. Аналогично, команда "%1 &" продолжает работу задания 1 в фоновом режиме и эквивалентна команде "bg %1".

Об изменении состояния задания командный интерпретатор узнает сразу. Обычно bash информирует об изменениях в состоянии заданий при выдаче очередного приглашения, чтобы не прерывать этой информацией выдачу любых других результатов. Если с помощью встроенной команды set установлена опция -b, bash информирует о таких изменениях немедленно.

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

ПРИГЛАШЕНИЯ

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

\a символ сигнала ASCII (звонок - 07)
\d дата в формате "День_недели Месяц Число" (т.е., "Tue May 26")
\e управляющий символ ASCII (033)
\h имя хоста вплоть до первого символа '.'
\H имя хоста
\n перевод строки
\r возврат каретки
\s имя командного интерпретатора - базовое имя из параметра $0 (часть полного имени после последней косой черты)
\t текущее время в 24-часовом формате ЧЧ:ММ:СС
\T текущее время в 12-часовом формате ЧЧ:ММ:СС
\@ текущее время в 12-часовом формате am/pm (утра/вечера)
\u имя текущего пользователя
\v версия командного интерпретатора bash (например, 2.00)
\V релиз командного интерпретатора bash, версия + уровень исправлений (например, 2.00.0)
\w текущий рабочий каталог
\W базовое имя текущего рабочего каталога
\! порядковый номер данной команды в списке истории
\# порядковый номер данной команды
\$ если эффективный идентификатор пользователя - 0, то #, иначе - $
\nnn символ, соответствующий восьмеричному числу nnn
\\ обратная косая
\[ начало последовательности непечатных символов, которая может использоваться для включения в приглашение управляющих символов терминала
\] завeршение последовательности непечатных символов

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

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

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

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

  В.К.



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

В избранное