Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Интернет: маркетинг, реклама, торговля" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Страницы справочного руководства ОС UNIX на русском : man ksh(1), часть первая
Информационный Канал Subscribe.Ru |
Выпуск 142
man ksh(1), часть первая
Уважаемые подписчики!
Этот выпуск - первый из серии, посвященной командному интерпретатору ksh.
Перевод, по сложившейся традиции, сделан по справочному руководству ОС Solaris 8.
Поскольку по правилам оформления рассылок в них не должно быть "висящих" гиперссылок href, не все перекрестные ссылки в выпусках, посвященных ksh, оформлены как гиперссылки. Когда перевод будет закончен, вы сможете скачать с сайта рассылки всю страницу в целом, со всеми необходимыми перекрестными и внешними ссылками.
Пользовательские команды |
ksh(1) |
ИМЯ
ksh, rksh - KornShell, стандартный/ограниченный командный интерпретатор и язык программирования
СИНОПСИС
-
/usr/bin/ksh [±abCefhikmnoprstuvx] [±o опция] ... [аргумент ...]
/usr/bin/ksh -c [±abCefhikmnoprstuvx] [±o опция] ...
строка_команды [имя_команды [аргумент ...]]
/usr/xpg4/bin/sh [±abCefhikmnoprstuvx] [±o опция] ... [аргумент ...]
/usr/xpg4/bin/sh -c [±abCefhikmnoprstuvx] [±o опция] ...
строка_команды [имя_команды [аргумент ...]]
/usr/bin/rksh [±abCefhikmnoprstuvx] [±o опция] ... [аргумент ...]
/usr/bin/rksh -c [±abCefhikmnoprstuvx] [±o опция] ...
строка_команды [имя_команды [аргумент ...]]
ОПИСАНИЕ
Команда /usr/xpg4/bin/sh идентична /usr/bin/ksh, команде и языку программирования, выполняющему команды, прочитанные с терминала или из файла. rksh - ограниченная версия командного интерпретатора ksh; он используется для настройки регистрационных имен и сред выполнения, возможности которых контролируются больше, чем при использовании стандартного командного интерпретатора. Описание аргументов командного интерпретатора см. в разделе "Вызов" ниже.
Определения
Метасимвол - это один из следующих символов:
; & ( ) | < > НОВАЯ_СТРОКА ПРОБЕЛ ТАБУЛЯЦИЯПробельный символ (blank) - это символ табуляции или пробел. Идентификатор - последовательность букв, цифр или символов подчеркивания, начиная с буквы или символа подчеркивания. Идентификаторы используются как имена для функций и переменных. Слово - это последовательность символов, разделенных одним или несколькими незамаскированными метасимволами.
Команда - это последовательность символов, соответствующая синтаксису языка командного интерпретатора. Командный интерпретатор читает каждую команду и выполняет желаемое действие либо непосредственно, либо вызывая отдельные утилиты. Специальная команда - это команда, выполняемая командным интерпретатором без создания отдельного процесса.
За исключением описанных в документации побочных эффектов, большинство специальных команд могут быть реализованы как отдельные утилиты.
Команды
Простая команда - это последовательность разделенных пробельными символами слов, перед которой может список присвоений переменным. (См. раздел "Среда" ниже.) Первое слово задает имя команды, которую надо выполнить. Кроме указанных ниже случаев, остальные слова передаются как аргументы вызванной команде. Имя команды передается как аргумент 0 (см. exec(2)). Значение простой команды - это ее статус выхода, если она завершилась нормально. Если же она завершается ненормально вследствие получения сигнала, значением будет номер сигнала плюс 128. Список значений сигналов см. на странице справочного руководства signal(3HEAD). Очевидно, нормальные значения статуса выхода от 129 до 255 нельзя отличить от ненормального выхода, вызванного получением сингала с номером от 1 до 127.
Конвейер - это последовательность одной или нескольких команд, разделенных символом |. Стандартный выходной поток каждой команды, кроме последней, соединяется с помощью pipe(2) со стандартным входным потоком следующей команды. Каждая команда запускается как отдельный процесс; командный интерпретатор ждет заверршения последней команды. Статус выхода конвейера - это статус выхода его последней команды.
Список - это последовательность одного или нескольких конвейеров, разделенных символами ;, &, && или ||, необязательно завершенная символами ;, & или |&. Из этих пяти символов, ;, & и |& имеют равный приоритет, который ниже, чем приоритет символов && и ||. Символы && и || также имеют равный приоритет. Точка с запятой (;) вызывает последовательное выполнение предшествующего конвейера; амперсанд (&) вызывает асинхронное выполнение предшествующего конвейера (т.е., командный интерпретатор не ждет, пока этот конвейер завершит работу). Символ |& вызывает асинхронное выполнение предыдущей команды или конвейера так, что с родительским командным интерпретатором устанавливается двусторонний канал обмена данными (pipe).
Стандартный входной и выходной поток запущенной команды может быть прочитан и записан из родительского командного интерпретатора с помощью опции -p специальных команд read и print, описанных в разделе "Специальные команды". Символ && (||) вызывает выполнение следующего за ним списка только если предшествующий конвейер возвращает не 0 (ненулевое значение). Произвольное количество переводов строк может идти в списке вместо точки с запятой в качестве разделителя команд.
Командой является простая команда или одна из следующих конструкций. Если не сказано иначе, значение, возвращаемое командой, является значением последней выполненной простой команды.
- for идентификатор [ in слово ... ] ; do список ; done
- При каждом выполнении команды for, идентификатор
устанавливается равным следующему слову из списка слов. Если
конструкция in слово ... не указана, команда for
выполняет список do один раз для каждого установленного
позиционного параметра (см. раздел "Подстановка параметров" ниже).
Выполнение завершается, когда в списке больше не остается слов.
- select идентификатор [ in слово ... ] ; do список ; done
- Команда select выдает в стандартный поток ошибок (дескриптор
файла 2) набор слов с числом перед каждым из них. Если конструкция
in слово ... не указана, используются позиционные параметры
(см. раздел "Подстановка параметров" ниже).
Выдается приглашение PS3 и строка читается из стандартного входного
потока. Если эта строка состоит из номера одного из перечисленных слов,
то значение переменной идентификатор устанавливается равным
слову, которое соответствует этому номеру. Если эта строка пуста, список
выбора выдается еще раз.
В противном случае, значение переменной идентификатор устанавливается равным NULL. (По поводу NULL см. раздел "Интерпретация пробельных символов"). Содержимое строки, прочитанной из стандартного входного потока, сохраняется в переменной REPLY. Список выполняется для каждого выбора, пока не произойдет принудительный останов (break) или не будет обнаружен символ конца файла (EOF). Если переменная REPLY устанавливается в NULL при выполнении списка, то список выбора выдается перед приглашением PS3 для следующего выбора.
- case слово in [ шаблон [ | шаблон ] ) список ;; ] ... esac
- Команда case выполняет список, связанный с первым шаблоном,
соответствующим слову. Форма шаблонов - такая же, как используется при
генерации имен файлов (см. раздел "Генерация имен файлов" ниже).
- if список ; then список ; [ elif список ; then список ; ... ] [ else список; ] fi
- Список, следующий за if выполняется и, если он
возвращает статус выхода 0, выполняется список, следующий
за первым then. В противном случае, выполняется список,
следующий после elif и, если его значение - 0, выполняется список
после следующего next. Если ни для одного из elif это не
оказалось верным, выполняется список после else.
Если конструкция else не указана или ни один список
после then не был выполнен, команда if возвращает статус
выхода 0.
- while список ; do список ; done
until список ; do список ; done - Команда while повторно выполняет список после while
и, если статус выхода последней команды в этом списке - 0,
выполняет список после do; в противном случае, цикл прекращается.
Если ни одна команда в списке do не выполнена, то команда while
возврращает статус выхода 0; until можно использовать вместо while
для применения отрицания к условию завершения цикла.
- (список)
- Выполнить список в отдельной среде. Учтите, что если
для обеспечения вложенности необходимо указать две открывающие скобки подряд,
между ними надо вставить пробел, чтобы избежать арифметического вычисления,
как описано ниже.
- {список}
- Список просто выполняется. Учтите, что в отличие от
метасимволов ( и ), { и } являются зарезервированными
словами и, чтобы быть распознанными, должны идти в начале строки или
после ;.
- [[выражение]]
- Вычисляет выражение и возвращает статус выхода 0, когда выражение истинно.
Описание выражения см. в разделе "Условные выражения" ниже.
- function идентификатор { список ;}
идентификатор() { список ;} - Определяет функцию, на которую можно ссылаться по идентификатору.
Тело функции - это список команд между { и }.
(См. раздел "Функции" ниже).
- time конвейер
- Конвейер выполняется и время выполнения, а также процессорное время в режиме пользователя и в режиме ядра (system time) выдается в стандартный поток ошибок.
Следующие зарезервированные слова распознаются только как первое слово команды, если они не замаскированы:
! if then else elif fi case esac for while until do done { } function select time [[ ]]
Комментарии
Слово, начинающееся с #, вызывает игнорирование этого и всех следующих символов до новой строки.
Псевдонимы
Первое слово каждой команды заменяется текстом псевдонима, если соответствующий псевдоним был определен. Имя псевдонима состоит из любого количества символов, исключая метасимволы, символы маскировки (quoting characters), символы подстановки имен файлов, символы подстановки параметров и команд, а также символ =. Строка замены может содержать любой допустимый сценарий командного интерпретатора, включая перечисленные выше метасимволы. Первое слово каждой команды в замененном тексте, отличающееся от заменяемого, будет проверяться на соответствие псевдонимам. Если последний символ значения псевдонима - пробельный, то следующее за псевдонимом слово также будет проверяться на предмет подстановки псевдонима. Псевдонимы можно использовать для переопределения специальных встроенных команд, но не перечисленных выше зарезервированных слов. Псевдонимы можно создавать, просматривать и экспортировать с помощью команды alias, а удалять - с помощью команды unalias. Экспортированные псевдонимы действуют для сценариев, вызываемых по имени, но должны быть переинициализированы для отдельных вызовов командного интерпретатора (см. раздел "Вызов" ниже). Чтобы предотвратить бесконечные циклы рекурсивной подстановки псевдонимов, если командный интерпретатор сейчас не обрабатывает псевдоним с тем же именем, слово будет заменено значением псевдонима; в противном случае, оно заменено не будет.
Подстановка псевдонимов выполняется при чтении сценариев, а не при их выполнении. Поэтому, чтобы псевдоним был учтен, команда определения псевдонима должна быть выполнена до чтения команды, в которой используется псевдоним.
Псевдонимы часто используются для сокращения полных имен. Опция команды задания псевдонима позволяет автоматически устанавливать в качестве значения псевдонима полное имя соответствующей команды. Эти псевдонимы называются отслеживаемыми (tracked aliases). Значение отслеживаемого псевдонима определяется при первом поиске соответствующей команды и становится неопределенным при каждом изменении значения переменной PATH. Эти псевдонимы остаются отслеживаемыми, так что последующая ссылка переопределит значение. Несколько отслеживаемых псевдонимов скомпилированы ("зашиты") в командный интерпретатор. Опция -h команды set преобразует имя каждой использованной команды в отслеживаемый псевдоним.
Следующие экспортированные псевдонимы скомпилированы (и встроены) в командный интерпретатор, но могут быть отменены или переопределены:
autoload='typeset -fu' false='let 0' functions='typeset -f' hash='alias -t' history='fc -l' integer='typeset -i' nohup='nohup ' r='fc -e -' true=':' type='whence -v'
Далее следует пример, связанный с завершающими пробельными символами и зарезервированными словами. Если пользователь набрал:
$ alias foo="/bin/ls " $ alias while="/"
эффектом выполнения:
$ while true > do > echo "Hello, World" > done
будет выдача на экран бесконечной последовательности строк Hello, World. Но, если пользователь наберет:
$ foo while
результатом будет листинг каталога /, выданный командой ls. Посколько подставленное вместо псевдонима foo значение завершается пробелом, подстановка псевдонима выполняется и в следующем слове. Следующее слово, while, также является псевдонимом, поэтому вместо него тоже подставляется значение. Поскольку в этой позиции слова команда не предполагается, оно не распознается как зарезервированное слово.
Если пользователь наберет:
$ foo; while
while интерпретируется как обычно, как зарезервированное слово.
Подстановка тильды
После того, как выполнена подстановка псевдонимов, каждое слово проверяется на то, не начинается ли оно с незамаскированного символа ~. Если да, то слово, вплоть до символа /, проверяется на совпадение с именем пользователя. Если такой пользователь найден, символ ~ и соответствующее регистрационное имя заменяется начальным каталогом этого пользователя. Это называется подстановкой тильды. Если соответствие не найдено, исходный текст отстается без изменений. Отдельный символ ~ или перед / заменяется значением $HOME. Символ ~, за которым идет + или -, заменяется значением $PWD и $OLDPWD, соответственно.
Кроме того, попытка подстановки тильды выполняется, когда значение, присваиваемое переменной, начинается с ~.
Copyleft (no c) 2005 В. Кравчук, OpenXS Initiative, перевод на русский язык
В следующем выпуске
Следующая часть перевода страницы справочного руководства ksh(1).
С наилучшими пожеланиями,
В.К.
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.othos.unixman |
Отписаться |
В избранное | ||