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

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


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

Выпуск 50

man bash(1), часть восьмая

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

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

Юбилейный выпуск!

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


bash(1)

УСЛОВНЫЕ ВЫРАЖЕНИЯ

Условные выражения используются составной командой [[ и встроенными командами test и [ для проверки атрибутов файла и выполнения строковых и арифметических сравнений. Выражения формируются из следующих унарных и бинарных элементарных условий. Если любой из аргументов файл в одном из условий имеет вид /dev/fd/n, проверяется файл с дескриптором n.

-a файл
Истинно, если файл существует.
-b файл
Истинно, если файл существует и являтся специальным блочным устройством.
-c файл
Истинно, если файл существует и является специальным символьным устройством.
-d файл
Истинно, если файл существует и является каталогом.
-e файл
Истинно, если файл существует
-f файл
Истинно, если файл существует и является обычным файлом.
-g файл
Истинно, если файл существует и имеет установленный бит SGID.
-h файл
Истинно, если файл существует и является символической связью.
-k файл
Истинно, если файл существует и имеет устновленный "клейкий" бит.
-p файл
Истинно, если файл существует и является именованным каналом (FIFO).
-r файл
Истинно, если файл существует и доступен для чтения.
-s файл
Истинно, если файл существует и имеет ненулевой размер.
-t fd
Истинно, если дескриптор файла fd открыт и связан с терминалом.
-u файл
Истинно, если файл существует и имеет установленный бит SUID.
-w файл
Истинно, если файл существует и доступен для записи.
-x файл
Истинно, если файл существует и является выполняемым.
-O файл
Истинно, если файл существует и принадлежит пользователю, задаваемому текущим эффективным идентификатором пользователя.
-G файл
Истинно, если файл существует и принадлежит группе, задаваемой текущим эффективным идентфикатором группы.
-L файл
Истинно, если файл существует и является символической связью.
-S файл
Истинно, если файл существует и является сокетом.
-N файл
Истинно, если файл существует и был изменен с момента последнего чтения.
файл1 -nt файл2
Истинно, если файл1 новее (в соответствии с датой изменения), чем файл2.
файл1 -ot файл2
Истинно, если файл1 старее, чем файл2.
файл1 -ef файл2
Истинно, если файл1 и файл2 находятся на одном устройстве и имеют одинаковые номера индексных дескрипторов.
-o опция
Истинно, если установлена указанная опция командного интерпретатора. Список опций см. далее в описании опции -o встроенной команды set.
-z строка
Истинно, если длина строки - ноль (т.е. строка - пустая).
-n строка
строка
Истинно, если длина строки - не ноль.
строка1 == строка2
Истинно, если строки совпадают. Вместо == можно использовать просто =.
строка1 != строка2
Истинно, если строки не совпадают.
строка1 < строка2
Истинно, если строка1 в текущей локали при лексикографическом упорядочении предшествует строке2.
строка1 > строка2
Истинно, если строка1 в текущей локали при лексикографическом упорядочении идет после строки2.
arg1 OP arg2
Оператор OP - один из следующих: -eq, -ne, -lt, -le, -gt или -ge. Эти бинарные арифметические операторы возвращают истину, если arg1 равен, не равен, меньше, меньше или равен,больше, больше или равен arg2, соответственно. Аргументы arg1 и arg2 могут быть любыми целыми числами.

ОБРАБОТКА ПРОСТОЙ КОМАНДЫ

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

  1. Слова, помеченные синтаксическим анализатором как присваивания переменным (те, что идут перед именем команды) и перенаправления сохраняются для дальнейшей обработки.
  2. В остальных словах выполняются подстановки и замены. Если после этого остались какие-то слова, первое из них считается именем команды, а остальные - ее аргументами.
  3. Перенаправления выполняются так, как описано ранее в разделе "ПЕРЕНАПРАВЛЕНИЕ".
  4. В тексте после = в каждом присваивании переменной перед присваиванием выполняется замена тильды, подстановка значений параметров, подстановка результатов выполнения команд и вычисление арифметических выражений, а также удаление кавычек.

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

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

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

ВЫПОЛНЕНИЕ КОМАНДЫ

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

Если имя команды не содержит сиволов косой черты, командный интерпретатор пытается ее найти. Если существует функция командного интерпретатора с таким именем, она вызывается как было описано выше в разделе "ФУНКЦИИ". Если же функции с таким именем нет, командный интерпретатор ищет ее в списке встроенных команд. Если такая встроенная команда есть, она выполняется.

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

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

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

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

СРЕДА ВЫПОЛНЕНИЯ КОМАНД

У командного интерпретатора есть среда выполнения, содержащая следующие компоненты:

  • открытые файлы, унаследованные командным интерпретатором при вызове, с учетом изменений, вызванных перенаправлениями, переданными встроенной команде exec
  • текущий рабочий каталог, установленный командами cd, pushd или popd, или унаследованный командным интерпретатором при вызове
  • маска режима создания файла, установленная с помощью команды umask или унаследованная от родительского процесса
  • текущие обработчики сигналов, установленные с помощью trap
  • параметры командного интерпретатора, установленные путем присваивания переменным или унаследованные из среды родительского процесса
  • функции командного интерпретатора, заданные в ходе выполнения или унаследованные из среды родительского процесса
  • опции, установленные при вызове (как стандартные, так и заданные явно в командной строке) или установленные с помощью комнады set
  • опции, установленные с помощью команды shopt
  • псевдонимы, заданные с помощью команды alias
  • идентификаторы различных процессов, в том числе, для фоновых заданий, значение параметра $$ и значение параметра $PPID

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

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

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

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

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

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

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

  В.К.



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

В избранное