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

Страницы справочного руководства ОС UNIX на русском : man ksh(1), часть восьмая, завершающая


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

Выпуск 149

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

Уважаемые подписчики!

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

Понятно, что толку - ноль, но напишу еще раз...

Если кто-то очень хочет послушать "живьем" что-нибудь по тематике моих рассылок (UNIX, Oracle, Informix) - напишите мне.

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


Вызов

Если командный интерпретатор вызван с помощью exec(2) и первый символ нулевого аргумента ($0) представляет собой -, то предполагается, что это начальный командный интерпретатор, и команды читаются из файла /etc/profile и либо из файла .profile в текущем каталоге, либо из $HOME/.profile, если хоть один из них существует. Затем команды читаются из файла, имя которого задается переменной среды ENV, если он существует. Если флаг -s не указан, но есть аргументы, то выполняется поиск по путям для первого аргумента, чтобы определить имя сценария для выполнения. Указанный в виде аргумента сценарий должен быть доступен для чтения, а любые установки битов setuid и setgid игнорируются. Если сценарий не найден по путям, аргумент обрабатывается так, как если бы он задавал имя встроенной команды или функции. Затем команды читаются так, как описано ниже. При вызове командным интерпретатором обрабатываются следующие флаги:

-c
Читать команды из строки_команд. Установить значение специального параметра 0 равным значению операнда имя_команды, а позиционные параметры ($1, $2 и т.д.) - равными остальным аргументам, последовательно. Из стандартного входного потока команды читаться не будут.

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

-i
Если указан флаг -i или входной и выходной потоки командного интерпретатора связаны с терминалом (как говорит вызов ioctl(2)), такой командный интерпретатор является интерактивным. В этом случае сигнал TERM игнорируется (так что kill 0 не завершает работу интерактивного командного интерпретатора), а сигнал INTR перехватывается и игнорируется (так что команду wait прервать нельзя). В любом случае, QUIT игнорируется командным интерпретатором.

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

Остальные флаги и аргументы представлены ранее, в описании команды set.

Только rksh

rksh используется для настройки регистрационных имен и сред выполнения, возможности которых строже контролируются, чем при использовании стандартного командного интерпретатора. Действия rksh идентичны ksh, за исключением того, что следующие действия не разрешены:

  • изменение каталога (см. cd(1))
  • установка значения переменных SHELL, ENV и PATH
  • задание путей или имен команд, содержащих /
  • перенаправление вывода (>, >|, <> и >>)
  • изменение группы (см. newgrp(1)).

Перечисленные выше ограничения вступают в силу после интерпретации файлов .profile и ENV.

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

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

Системный администратор часто создает каталог с командами (т.е., /usr/rbin), которые можно затем безопасно вызывать в rksh.

ОШИБКИ

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

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

Ошибка Специальная встроенная команда Другие утилиты
Синтаксическая ошибка с точки зрения языка командного интерпретатора работа завершается работа завершается
Синтаксическая ошибка с точки зрения утилиты (ошибка в опции или операнде) работа завершается работа не завершается
Ошибка перенаправления работа завершается работа не завершается
Ошибка при присвоении переменной работа завершается работа не завершается
Ошибка подстановки работа завершается работа завершается
Команда не найдена не бывает работа может завершиться
Сценарий, вызываемый через точку, не найден работа завершается не бывает

Ошибка подстановки возникает при выполнении подстановок командным интерпретатором (например, ${x!y}, поскольку ! - недопустимый оператор); реализация может считать их синтаксическими ошибками, если сможет выявить их при разбиении команды на лексемы, а не при выполнении подстановок.

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

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

ИСПОЛЬЗОВАНИЕ

Описание поведения ksh и rksh при работе с файлами, большими или равными 2 Гбайтам (2**31 байтам), см. на странице справочного руководства largefile(5).

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

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

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

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

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

ФАЙЛЫ

/etc/profile
/etc/suid_profile
$HOME/.profile
/tmp/sh*
/dev/null

АТРИБУТЫ

Описание следующих атрибутов см. на странице справочного руководства attributes(5):

/usr/bin/ksh
/usr/bin/rksh

ТИП АТРИБУТА ЗНАЧЕНИЕ АТРИБУТА
Доступен в пакете SUNWcsu
CSI Включено

/usr/xpg4/bin/ksh

ТИП АТРИБУТА ЗНАЧЕНИЕ АТРИБУТА
Доступен в пакете SUNWxcu4
CSI Включено

ССЫЛКИ

cat(1), cd(1), chmod(1), cut(1), echo(1), env(1), getoptcvt(1), jobs(1), login(1), newgrp(1), paste(1), ps(1), shell_builtins(1), stty(1), test(1), vi(1), dup(2), exec(2), fork(2), ioctl(2), lseek(2), pipe(2), ulimit(2), umask(2), wait(2), rand(3C), signal(3C), a.out(4), profile(4), attributes(5), environ(5), largefile(5), signal(3HEAD), XPG4(5)

Morris I. Bolsky and David G. Korn, The KornShell Command and Programming Language, Prentice Hall, 1989.

ПРЕДУПРЕЖДЕНИЯ

Использование сценариев командного интерпретатора с установленным битом setuid настоятельно не рекомендуется.

ПРИМЕЧАНИЯ

Если выполняется команда, представляющая собой отслеживаемый псевдоним, а затем команда с тем же именем устанавливается в каталог, находящийся в пути поиска перед каталогом, в котором находилась исходная команда, командный интерпретатор будет продолжать выполнять исходную команду. Используйте опцию -t команды alias для исправления этой ситуации.

Некоторые очень старые сценарии командного интерпретатора содержат ^ как синоним символа конвейера, |.

Использование встроенной команды fc в составной команде приведет к исчезновению всей команды из файла истории.

Встроенная команда . файл читает весь файл до выполнения любых команд. Поэтому команды alias и unalias в файле не будут применяться к функциям, определенным в файле.

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

Последнее изменение: 26 февраля 1999 года

Copyleft (no c) 2005 В. Кравчук, OpenXS Initiative, перевод на русский язык


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

Содержание, терминология и прочие комментарии относительно представленного перевода страницы справочного руководства ksh(1). Далее по плану долгой и счастливой жизни рассылки - перевод man smb.conf(5).

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

  В.К.


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.othos.unixman
Отписаться

В избранное