ksh

Командный интерпретатор Korn (UNIX)

Синтаксис:

ksh [+-abCefhikmnprsuvxX] [+-o option] [[ -c string_of_options [command_name] | -s | файл ] [аргумент...]]

Опции:

Следующие опции можно определить только в командной строке:

-c string_of_options
Выполнить команду (команды) из command_name.
-i
Использовать интерактивный режим.
-l
Начальный командный интерпретатор; также подразумевает интерактивный режим.
-s
Командный интерпретатор считывает команды из стандартного потока ввода; все аргументы, не являющиеся опциями, являются позиционными параметрами.
-r
Использовать ограниченный режим.

В дополнение к вышеупомянутым, можно использовать опции, описанные для встроенной команды set, в командной строке.

Платформы:

ЗОСРВ «Нейтрино»

Целевые архитектуры:

aarch64, arm, armv7, e2k, mips, ppc, x86

Описание:

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


Note: Этот командный интерпретатор отличается от стандартного командного интерпретатора QNX 4, который был разработан по образцу ksh86.

Это описание включает в себя следующие разделы:

Запуск командного интерпретатора
Синтаксис команд
Составные команды
Экранирование специальных символов
Псевдонимы
Подстановка
Параметры
Замена тильды
Раскрытие фигурных скобок (чередование)
Шаблоны имен файлов
Перенаправление ввода/вывода
Арифметические выражения
Сопроцессы
Функции
Режим POSIX
Выполнение команд и встроенные команды
Встроенная команда . (точка)
Встроенная команда : (пусто)
Встроенная команда alias
Встроенная команда bg
Встроенная команда bind
Встроенная команда break
Встроенная команда builtin
Встроенная команда cd
Встроенная команда command
Встроенная команда continue
Встроенная команда echo
Встроенная команда eval
Встроенная команда exec
Встроенная команда exit
Встроенная команда export
Встроенная команда false
Встроенная команда fc
Встроенная команда fg
Встроенная команда getopts
Встроенная команда hash
Встроенная команда jobs
Встроенная команда kill
Встроенная команда let
Встроенная команда print
Встроенная команда pwd
Встроенная команда read
Встроенная команда readonly
Встроенная команда return
Встроенная команда set
Встроенная команда shift
Встроенная команда test или [
Встроенная команда times
Встроенная команда trap
Встроенная команда true
Встроенная команда typeset
Встроенная команда ulimit
Встроенная команда umask
Встроенная команда unalias
Встроенная команда unset
Встроенная команда wait
Встроенная команда whence
Управление заданиями
Интерактивная правка строк ввода emacs

Запуск командного интерпретатора

Если не указана ни опция -c, ни опция -s, то первый аргумент, не являющийся опцией, определяет имя файла, из которого командный интерпретатор считывает команды; если аргументы, не являющиеся опциями, отсутствуют, то командный интерпретатор считывает команды из стандартного потока ввода. Имя командного интерпретатора (т.е. содержимое параметра $0) определяется следующим образом: если используется опция -c и присутствует аргумент, не являющийся опцией, то последний используется в качестве имени командного интерпретатора; если команды считываются из файла, то в качестве имени используется имя этого файла; в противном случае используется имя, посредством которого был вызван командный интерпретатор (т.е. argv[0]).

Командный интерпретатор работает в интерактивном режиме, если указана опция -i или если и стандартный поток ввода, и стандартный поток ошибок подключены к терминалу ввода-вывода. У интерактивного командного интерпретатора активировано управление заданиями (при наличии), игнорирование сигналов SIGINT, SIGQUIT и SIGTERM и вывод приглашений перед считыванием ввода (см. параметры PS1 и PS2). Для неинтерактивных командных интерпретаторов по умолчанию включена опция trackall (см. далее описание команды set).

Командный интерпретатор является ограниченным, если указана опция -r или если базовое имя, посредством которого вызван командный интерпретатор, либо параметр SHELL соответствуют шаблону "*r*sh" (например, rsh, rksh и т.д.). После обработки командным интерпретатором какого-либо профиля и файлов $ENV вступают в силу следующие ограничения:

Командный интерпретатор является привилегированным, если указана опция -p или если реальный идентификатор пользователя или группы не соответствует действующему идентификатору пользователя или групповому идентификатору (см. getuid() и getgid()). Привилегированный командный интерпретатор не обрабатывает $HOME/.profile или переменную среды ENV (см. далее); вместо этого он обрабатывает файл /etc/suid_profile. В результате очистки опции привилегии командный интерпретатор устанавливает эффективный идентификатор пользователя (группы) равный реальному идентификатору пользователя (группы).

Если базовое имя, посредством которого вызывается командный интерпретатор (т.е. argv[0]), начинается с - или используется опция -l, то предполагается, что командный интерпретатор является начальным командным интерпретатором. В этом случае командный интерпретатор считывает и выполняет содержимое /etc/profile и $HOME/.profile, если они существуют и доступны для чтения.

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

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

Синтаксис команд

Командный интерпретатор начинает синтаксический анализ своего потока ввода путем его разбиения на слова. В качестве разделителей для слов, которые являются последовательностями символов, используются не экранированные в кавычки пробельные символы (символы пробела, табуляции и новой строки) или метасимволы (<, >, |, ;, &, ( и )). Кроме случаев разделения слов, символы пробела и табуляции игнорируются, тогда как символы новой строки обычно разделяют команды. Метасимволы используются при построении следующих лексем:

<, <&, <<, >, >&, >> и т.д.
Указывают перенаправление (см. раздел Перенаправление ввода/вывода).
|
Создает конвейеры.
|&
Создает сопроцессы (см. раздел Сопроцессы).
;
Разделяет команды.
&
Создает асинхронные конвейеры.
&& и ||
Указывают условное выполнение.
;;
Используется в операторах case.
(( .. ))
Используется в арифметических выражениях.
( .. )
Создают порожденные командные интерпретаторы.

Можно экранировать пробельные символы и метасимволы по отдельности с помощью обратной косой черты (\) или группой с помощью двойных (") или одинарных (') кавычек. Следует отметить, что командный интерпретатор по особенному обрабатывает следующие символы, которые необходимо экранировать, если они должны представлять самих себя:

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

Исключение возникает, когда за # следует !shell. Это позволяет запустить сценарий при помощи альтернативного командного интерпретатора. Например, если интерпретатор команд сsh находится в /bin/csh, то можно указать ksh запускать сценарии с помощью интерпретатора команд сsh путем ввода следующей строки в начало сценариев:
#!/bin/csh
$
Вводит подстановки параметров, команд и арифметические подстановки (см. раздел Подстановка).
`
Вводит подстановку команды в прежнем стиле (см. раздел Подстановка).
~
Начинает раскрытие каталога (см. раздел Замена тильды);
{ и }
Отделяют чередование в стиле csh (см. раздел Раскрытие фигурных скобок).
*, ? и [
Используются в создании имени файла (см. раздел Шаблоны имен файлов).

При синтаксическом анализе слов и лексем командный интерпретатор выстраивает команды двух следующих основных типов: простые команды, которые обычно представляют собой выполняемые команды, и составные команды, например, операторы for и if, группирующие конструкции и определения функций.

Простая команда состоит из некоторой комбинации присвоений параметров (см. раздел Параметры), перенаправлений ввода/вывода (см. раздел Перенаправление ввода/вывода) и командных слов; единственным ограничением является необходимость того, чтобы присвоения параметров предшествовали командным словам. Командные слова, при наличии, определяют команду, которая должна быть выполнена, и ее аргументы. Команда может быть встроенной командой командного интерпретатора, функцией или внешней командой, т.е. отдельным исполняемым файлом, местоположение которого определяется параметром PATH (см. раздел Выполнение команд и встроенные команды). Следует отметить, что все командные конструкции имеют следующие статусы завершения:

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


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

echo $?

Для получения дополнительной информации см. раздел Параметры.


С помощью лексемы | можно выстраивать из команд цепочки, формирующие конвейеры, в которых стандартный поток вывода каждой команды, кроме последней, перенаправляется (см. утилиту pipe()) в стандартный поток ввода следующей команды. Статусом завершения конвейера является статус завершения его последней команды. Конвейеру можно задать префикс из зарезервированного слова !, в результате чего статус завершения конвейера будет логически дополняться: если исходным статусом является 0, дополненным статусом будет 1, а если исходный статус отличается от 0, то дополненным статусом будет 0.

Можно создавать списки команд путем разделения конвейеров с помощью следующих лексем:

&&, ||
Условное выполнение: cmd1 && cmd2 выполняет cmd2 только в том случае, если статус завершения cmd1 является нулем; || является противоположностью – cmd2 выполняется только в том случае, если статус завершения cmd1 является отличным от нуля. Лексемы && и || имеют одинаковый приоритет, который выше приоритета лексем &, |& и ;, приоритет которых также одинаков.
&
Вызывает выполнение предыдущей команды асинхронно, т.е. командный интерпретатор запускает команду, но не ожидает ее завершения (однако командный интерпретатор отслеживает статус асинхронных команд – см. раздел Управление заданиями). Если асинхронная команда запускается при отключенном управлении заданиями (т.е. в большинстве сценариев), то команда запускается с игнорированием сигналов INT и QUIT и с перенаправлением потока ввода из /dev/null (однако указанные в асинхронной команде перенаправления имеют приоритет).
|&
Запускает сопроцессы, которые являются особым видом асинхронного процесса (см. раздел Сопроцессы).
;
Последовательное выполнение: cmd1 ; cmd2 выполняет cmd1, и затем выполняет cmd2 после завершения первой команды.

Следует отметить, что команда обязательно следует операторам && и ||, в то время как следовать операторам &, |& и ; для команды не обязательно. Статусом завершения списка является статус завершения последней выполненной команды, за исключением асинхронных списков, для которых статусом завершения является 0.

Составные команды

Составные команды создаются с помощью описанных далее зарезервированных слов. Эти слова распознаются только в том случае, если они не экранированы кавычкам и используются в качестве первого слова команды (т.е. возможность поместить присвоения параметров или перенаправления перед ними отсутствует):

case else function then ! do esac if time [[ done fi in until { elif for select while }


Note: Некоторые командные интерпретаторы (за исключением этого) выполняют команды управляющей структуры в порожденном командном интерпретаторе, когда один или несколько соответствующих дескрипторов файлов перенаправлены таким образом, что любые изменения окружения в них завершаются отказом. Во избежание проблем с переносимостью, вместо этого необходимо использовать оператор exec для того, чтобы перенаправить дескрипторы файлов до управляющей структуры.

В представленных далее описаниях составных команд списки команд (обозначенные как list), за которыми следуют зарезервированные слова, должны заканчиваться точкой с запятой, символом новой строки или (синтаксически правильным) зарезервированным словом. Например, следующие комбинации являются действительными:

{ echo foo; echo bar; } { echo foo; echo bar} { { echo foo; echo bar; } }

а следующая действительной не является:

{ echo foo; echo bar }

Доступны следующие команды:

( list )
Выполнить команду list в порожденном командном интерпретаторе. Неявный способ передачи изменений окружения от порожденного командного интерпретатора назад к родительскому отсутствует.
{ list }
Составная конструкция; выполняется команда list, но не в порожденном командном интерпретаторе. Следует отметить, что { и } являются зарезервированными словами, а не метасимволами.
case слово in [ [(] шаблон [| шаблон]...) список ;; ] ... esac
Оператор case осуществляет попытку сравнить слово с указанными шаблонами; выполняется список, связанный с первым совпадающим шаблоном.

Используемые в операторе case шаблоны эквивалентны шаблонам, которые используются для шаблонов имен файлов за исключением того, что касающиеся . и / ограничения не действуют. Следует отметить, что любой неэкранированный кавычками символ пробела до и после шаблона удаляется; любой символ пробела в пределах шаблона необходимо экранировать. Как к словам, так и к шаблонам применимы подстановки параметров, команд, тильды и арифметические подстановки.

По историческим причинам вместо in и esac можно использовать открывающие и закрывающие фигурные скобки (например, case $foo { *) echo bar; }).

Статусом завершения оператора case является статус завершения списка, а если список не выполнен, то статусом завершения является нуль.
for имя [ in слово ... завершающий_символ ] do список done
Для каждого слова в указанном списке слов (где завершающий_символ представляет собой символ новой строки или ;), параметру имя устанавливается слово, и выполняется список. Если для того, чтобы указать список слов, in не используется, то вместо него используются позиционные параметры ($1, $2 и т.д.).

По историческим причинам вместо do и done можно использовать открывающие и закрывающие фигурные скобки (например, for i; { echo $i; }).

Статусом завершения оператора for является статус завершения последнего списка, а если список не выполнен, то статусом завершения является нуль.
if список then список [elif список then список] ... [else список] fi
Если статус завершения первого списка является нулем, то выполняется второй список; в противном случае с аналогичными последствиями выполняется список, который следует за elif, при наличии. Если следующие за выражениями if и elif списки завершаются ошибкой (т.е. завершаются с ненулевым статусом), выполняется список, который следует за оператором else.

Статусом завершения оператора if является статус завершения выполненного безусловного списка; если безусловный список не выполнен, статусом завершения является нуль.
select имя [ in слово ... завершающий_символ ] do список done
Оператор select обеспечивает автоматический метод представления пользователю меню и выбора из него. Нумерованный список указанных слов (где завершающий_символ представляет собой символ новой строки или ;) выводится в стандартный поток ошибок, после чего выводится приглашение (PS3, обычно "#? "). После этого из стандартного потока ввода считывается номер, соответствующий одному из пронумерованных слов, выбранному слову устанавливается имя (в случае недействительного выбора – отменяется), параметру REPLY устанавливается считанное (начальные и конечные пробелы удаляются), и выполняется список.

Если ввести пустую строку (т.е. ни одного или несколько символов IFS), меню выводится повторно без выполнения списка. Если значение параметра REPLY по завершении списка равно нулю, то выводится нумерованный список, приглашение и т.д. Этот процесс продолжается до тех пор, пока не будет считан признак конца файла, не будет получено прерывание, или в цикле не будет выполнен оператор завершения. Если in слово ... не указано, то используются позиционные параметры (т.е. $1, $2 и т.д.).

По историческим причинам вместо do и done можно использовать открывающие и закрывающие фигурные скобки (например, select i; { echo $i; }).

Если для выхода из цикла используется оператор завершения, то статусом завершения оператора select будет нуль; в противном случае статус завершения будет отличным от нуля.
until список do список done
Этот оператор работает аналогично оператору while, за исключением того, что тело выполняется только в том случае, если статус завершения первого списка отличен от нуля.
while список do список done
while является циклом предварительного контроля. Его тело выполняется в случаях, когда статус завершения первого списка равен нулю. Статусом завершения оператора while является статус завершения последнего списка в теле цикла; если тело не выполнено, статусом завершения является нуль.
function имя { список }
Определить функцию имя. См. раздел Функции. Следует отметить, что перенаправления, указанные после определения функции, выполняются при каждом выполнении функции, а не при выполнении определения функции.
имя () команда
По сути аналогична функции function. См. раздел Функции.
(( выражение ))
Анализировать арифметическое выражение; эквивалентно let "выражение". См. раздел Арифметические выражения и описание встроенной команды let далее.
[[ выражение ]]
Аналогично встроенным командам test and [ ... ] (описаны далее), со следующими исключениями:

Экранирование специальных символов

Экранирование специальных символов используется для предотвращения особой интерпретации символов или слов командным интерпретатором:

Псевдонимы

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

Командный интерпретатор автоматически определяет следующие псевдонимы команд:

autoload='typeset -fu' functions='typeset -f' hash='alias -t' history='fc -l' integer='typeset -i' local='typeset' login='exec login' newgrp='exec newgrp' nohup='nohup ' r='fc -e -' stop='kill -STOP' suspend='kill -STOP $$' type='whence -v'

Отслеживаемые псевдонимы позволяют командному интерпретатору сохранить местоположение определенной команды для последующего использования. В первый раз при выполнении командным интерпретатором поиска по пути команды, которая отмечена как отслеживаемый псевдоним, сохраняется полный путь команды. Когда команда выполняется в следующий раз, командный интерпретатор проверяет актуальность сохраненного пути, и, если путь существует, повторно поиск пути не выполняет. Список отслеживаемых псевдонимов можно создать и вывести с помощью утилиты alias -t.


Note: В результате изменения параметра PATH удаляются сохраненные пути ко всем отслеживаемым псевдонимам.

Если установлена опция trackall (например, set -o trackall или set -h), командный интерпретатор отслеживает все команды. Для неинтерактивных командных интерпретаторов эта опция устанавливается автоматически. Интерактивные командные интерпретаторы отслеживают только следующие команды: cat, cc, chmod, cp, date, grep, ls, make, mv, pr, rm, sed, sh и who.

Подстановка

Первый шаг выполнения простой команды командным интерпретатором – обработка подстановок по словам в команде. Можно выделить три типа подстановок:

Подстановка Форма подстановки
Подстановка параметра $имя или ${...} (см. раздел Параметры)
Подстановка команды $(команда) или `команда`
Арифметическая подстановка $((выражение))

Если подстановка расположена за двойными кавычками, то результат подстановки, как правило, подлежит разделению на слова или поля, в зависимости от текущего значения параметра IFS (Internal Field Separator; внутренний разделитель полей).

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

Пример: если для IFS установлено значение <space>:, то последовательность символов <space>A<space>:<space><space>B::D будет содержать четыре поля: A, B, пустое поле, D. Следует отметить, что если для параметра IFS установлено значение пустой строки, то разделение на поля не выполняется; если этот параметр не установлен, то его значением по умолчанию является пробел, символ табуляции и символ новой строки.

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

Подстановка команды заменяется на выходные данные, созданные указанной командой, которая запускается в порожденном командном интерпретаторе. К подстановкам $(команда) при синтаксическом анализе команды применяются обычные правила экранирования; при использовании формы `команда` удаляется символ \ с последующим символом $, ` или \ (сочетание \ с любым другим символом после него не изменяется).

Особый случай подстановки команды: команда формы < файл представляет собой подстановку содержания файла файл. Например, подстановка $(< foo) действует аналогично подстановке $(cat foo), но вторая из них выполняется более эффективно, поскольку при этом не запускается процесс.


Note: Выражения $(команда) в настоящее время анализируются путем поиска парной скобки без учета кавычек. В ближайшее время эта ошибка по возможности будет исправлена.

Арифметические подстановки заменяются на значение указанного выражения. Например, команда echo $((2+3*4)) выводит результат 14. Описание формы выражение приведено в разделе Арифметические выражения.

Параметры

Параметры представляют собой переменные командного интерпретатора; им можно присваивать значения и использовать эти значения посредством подстановки параметров. Именем любого параметра является один из специальных символов пунктуации или цифры, описанных далее, или буква, за которой следует несколько букв или цифр или ни одной (подчеркивание (_) считается буквой). Подстановки параметров имеют вид $имя или ${имя}, где имя – имя параметра. В случае подстановки не установленного предварительно параметра такой параметр заменяется на пустую строку, если не установлена опция nounset (set -o nounset или set -u); в последнем случае возникает ошибка.

Значения параметров можно присваивать следующими способами:

Параметры с атрибутом экспорта (устанавливается посредством команды export или typeset -x либо присвоениями параметров с последующим вводом простых команд) помещаются в среду команд, запускаемых командным интерпретатором (см. описание environ()), как пары имя=значение. Порядок расположения параметров в среде команды не определяется. При запуске командный интерпретатор извлекает параметры и соответствующие значения из своего окружения и автоматически устанавливает для этих параметров атрибут экспорта.

В форме подстановки параметров ${имя} можно применять следующие модификаторы:

${имя:-слово}
Если имя определено и не является пустым, то подставляется это значение; в противном случае подставляется слово.
${имя:+слово}
Если имя определено и не является пустым, то подставляется слово, в противном случае подстановка не выполняется.
${имя:=слово}
Если имя определено и не является пустым, то подставляется это значение, в противном случае ему присваивается слово и выполняется подстановка результирующего значения имя.
${имя:?слово}
Если имя установлено и не является пустым, то подставляется это значение, в противном случае слово выводится в стандартный поток ошибок (с добавлением имя: перед ним) и возникает ошибка (как правило, вызывающая прекращение работы сценария командного интерпретатора, функции или .-сценария). Если слово не указано, то вместо него используется строка parameter null or not set.

Если из вышеописанных модификаторов исключить символ :, то условия будут зависеть только от того, определено ли имя (в отличие от того, является ли оно определенным и не пустым значением). Если слово необходимо, то для него выполняется подстановка параметров, команд, тильды и арифметическая подстановка; если значение слово не требуется, его анализ не выполняется.

Можно также использовать следующие формы подстановки параметров:

${#имя}
Число позиционных параметров (если имя имеет значение *, @ или не указано) или длина строкового значения параметра имя.
${#имя[*]}
${#имя[@]}
Количество элементов в массиве имя.
${имя#шаблон}
${имя##шаблон}
Если шаблон совпадает с начальной частью значения параметра имя, то совпадающий текст из результата подстановки удаляется. Один символ # означает кратчайшее совпадение, два таких символа – самое длинное.
${имя%шаблон}
${имя%%шаблон}
Аналогична подстановке ${...#...}, но с удалением из конечной части значения.

Командный интерпретатор неявно устанавливает следующие специальные параметры (эти параметры невозможно установить напрямую путем присвоения):

!
Идентификатор последнего запущенного фонового процесса. Если фоновые процессы не были запущены, то этот параметр остается не установленным.
#
Число позиционных параметров (например, $1, $2 и т.д.).
$
Идентификатор процесса данного командного интерпретатора или исходного командного интерпретатора, если данный командный интерпретатор является порожденным.
-
Конкатенация текущих однобуквенных опций (список опций приведен в описании команды set далее).
?
Статус завершения последней выполненной неасинхронной команды. Если выполнение последней команды было прервано сигналом, то для $? устанавливается значение 128 плюс номер сигнала.
0
Имя, посредством которого был вызван командный интерпретатор (т.е. argv[0]), или имя_команды, если он был вызван посредством опции -c и было указано имя_команды, или аргумент файл, если он был указан. Если опция posix не установлена, то $0 будет содержать имя текущей функции или сценария.
1 ... 9
Первые девять позиционных параметров, переданные командному интерпретатору, функции или .-сценарию. Обращение к последующим позиционным параметрам выполняется в форме ${номер}.
*
Все позиционные параметры (кроме параметра 0), т.е. $1 $2 $3 и т.д. Параметры, расположенные вне двойных кавычек, являются отдельными словами (подлежащими разделению на слова); параметры в двойных кавычках разделяются по первому символу параметра IFS (или пустой строке в случае пустого параметра IFS).
@
Аналогичен $*; если двойные кавычки не используются (в этом случае для каждого позиционного параметра создается отдельное слово), то при отсутствии позиционных параметров слово не создается (для обращения к аргументам можно использовать $@, при этом возвращается их точное значение без отбрасывания пустых аргументов или их разделения пробелами).

Командный интерпретатор устанавливает и/или использует следующие параметры:

_ (символ подчеркивания)
Если командный интерпретатор выполняет внешнюю команду, то для этого параметра в среде нового процесса устанавливается путь к выполняемой команде. В интерактивном режиме работы для этого параметра в родительском командном интерпретаторе устанавливается последнее слово предыдущей команды. В случае анализа сообщений MAILPATH этот параметр содержит имя измененного файла (см. описание параметра MAILPATH далее).
CDPATH
Путь поиска для встроенной команды cd. Работает аналогично параметру PATH для тех каталогов, которые не начинаются с символа /, в командах cd. Следует отметить, что в том случае, если параметр CDPATH установлен и не содержит . или пустой путь, то поиск по текущему каталогу не выполняется.
COLUMNS
Значение этого параметра равно числу столбцов в терминале или окне. В настоящее время устанавливается равным значению столбцы, сообщенному командой stty, если это значение отлично от нуля. Этот параметр используется в интерактивных режимах правки строк, а также командами select, set -o и kill -l для форматирования информации по столбцам.
EDITOR
Если не установлен параметр VISUAL, то данный параметр управляет режимом обработки командной строки для интерактивных командных интерпретаторов. Описание его работы приведено в описании параметра VISUAL далее.
ENV
Если эта переменная среды оказывается установленной после выполнения каких-либо файлов профилей, то ее раскрытое значение используется в качестве файла запуска командного интерпретатора. Как правило, она содержит определения функций и псевдонимов. Часто этому файлу дают имя .kshrc, однако ему можно присвоить любое имя.
EXECSHELL
Если этот параметр установлен, то предполагается, что он содержит указание на командный интерпретатор, используемый для выполнения тех команд, которые не удается выполнить с помощью execve() и которые не начинаются с последовательности #! командный_интерпретатор.
FCEDIT
Редактор, используемый командой fc (см. далее).
FPATH
Аналогичен параметру PATH, но используется при выполнении неопределенной функции для поиска файла, определяющего эту функцию. Кроме того, он используется в случае, если команду не удается обнаружить с помощью переменной PATH. Для получения дополнительной информации см. раздел Функции.
HISTFILE
Имя файла, используемого для сохранения истории. Если этому параметру присвоено значение соответствующего файла, то выполняется загрузка истории из этого файла. Кроме того, если на одном компьютере запущено несколько экземпляров командного интерпретатора и их параметры HISTFILE указывают на один и тот же файл, то для этих экземпляров ведется одна история.

Note: Если значение HISTFILE не установлено, то файл истории не используется. В этом заключается одно из отличий от исходного командного интерпретатора Korn, которым используется файл $HOME/.sh_history; вероятно, в будущем ksh также будет использовать файл истории по умолчанию.

HISTSIZE
Число команд, сохраняемых в истории, по умолчанию – 128.
HOME
Каталог по умолчанию для команды cd и значение, подставляемое для неопределенной ~ (см. раздел Замена тильды).
IFS
Внутренний разделитель поля, используемый при подстановке, а также командой read для разделения значений на отдельные аргументы; обычно включает в себя пробел, символ табуляции и символ новой строки. Для получения дополнительной информации см. раздел Подстановка.

Note: Этот параметр не импортируется из окружения при запуске командного интерпретатора.

KSH_VERSION
Версия командного интерпретатора и дата создания этой версии (только для чтения). См. также команды версий в разделе Интерактивная правка строк ввода emacs.
MAIL
Если этот параметр установлен, то пользователю сообщается о наличии новой почты в указанном файле. Если установлен параметр MAILPATH, то данный параметр игнорируется.
MAILCHECK
Периодичность в секундах, с которой командный интерпретатор проверяет наличие почты в файле (файлах), указанном параметром MAIL или MAILPATH. Если значение равно 0, то проверка производится командным интерпретатором перед каждым выводом приглашения. Значение по умолчанию равно 600 (10 минут).
MAILPATH
Список файлов, проверяемых на наличие почты. Этот список разделяется двоеточиями; после каждого файла может следовать символ ? и сообщение, которое выводится при поступлении новой почты. К этому сообщению применяется подстановка команд, параметров и арифметическая подстановка; в процессе подстановки параметром $_ указывается имя соответствующего файла. Сообщение по умолчанию имеет вид you have mail in $_.
OLDPWD
Предыдущий рабочий каталог. Если в результате выполнения команды cd не удалось перейти в другой каталог после запуска командного интерпретатора или если командному интерпретатору неизвестно местонахождение этого каталога, то этот параметр остается не установленным.
OPTARG
При использовании getopts этот параметр содержит аргумент для опции после синтаксического анализа, если он необходим для этой опции.
OPTIND
Индекс последнего обработанного аргумента при использовании getopts. Если этому параметру присвоено значение 1, то при следующем вызове getopts начинает обработку аргументов с начала.
PATH
Разделенный двоеточиями список каталогов, в которых осуществляется поиск требуемых команд и файлов, вызываемых с точкой (.). Пустая строка, возникающая благодаря двоеточию в начале или в конце, или двум двоеточиям подряд, интерпретируется как ".", т.е. текущий каталог. Для получения дополнительной информации об установке переменной среды PATH см. «Установка переменных PATH и LD_LIBRARY_PATH» в главе «Конфигурирование среды» документа «Руководство системного программиста (администратора)».
POSIXLY_CORRECT
При установке этого параметра активируется опция posix. См. раздел Режим POSIX.
PPID
Идентификатор процесса родительского командного интерпретатора (только чтение).
PS1
Основное приглашение для интерактивных командных интерпретаторов. Выполняются подстановки параметров, команд и арифметические подстановки, а символ ! заменяется на номер текущей команды (см. описание команды fc далее). Добавить в приглашение собственно символ ! можно, указав в PS1 сочетание !!.

Следует отметить, что редакторы командной строки пытаются определить длину приглашения (в целях определения расстояния до края экрана), поэтому наличие в приглашении управляющих последовательностей может привести к ошибкам. Командному интерпретатору можно запретить обработку определенных последовательностей (таких как управляющие последовательности) путем ввода непечатаемого символа перед приглашением (это может быть, например, символ Ctrl - A), за которым указывается символ возврата каретки, и последующего отделения управляющих последовательностей этим непечатаемым символом. Если непечатаемые символы отсутствуют, ситуация становится затруднительной. Следует отметить, причина заключается в исходном ksh, а не в изменениях, внесенных автором. Значение по умолчанию – $ для пользователей без прав root и # для пользователя root.
PS2
Дополнительная строка приглашения; по умолчанию – "> ". Используется при необходимости ввода дополнительной информации для завершения выполнения команды.
PS3
Приглашение, используемое оператором select для чтения выбранного пункта меню. Значение по умолчанию – "#? ".
PS4
Указывается перед командами, отображаемыми при отслеживании хода выполнения (см. описание команды set -x далее). До вывода выполняется подстановка параметров, команд и арифметическая подстановка. Значение по умолчанию – "+ ".
PWD
Текущий рабочий каталог. Этот параметр может быть не установлен или пуст, если у командного интерпретатора отсутствует информация о его местоположении.
RANDOM
Простой генератор случайных чисел. Каждый раз при обращении к параметру RANDOM ему присваивается следующее число в случайной последовательности чисел. Можно установить определенную позицию в этой последовательности путем присвоения параметру RANDOM численного значения (см. описание функции rand()).
REPLY
Параметр по умолчанию для команды read, если не указаны имена. Также используется в циклах select для сохранения значения, которое считано из стандартного потока ввода.
SECONDS
Период в секундах, истекший с момента запуска командного интерпретатора, или, если этому параметру было присвоено целое значение, период в секундах, истекший с момента такого присвоения, плюс присвоенное значение.
TMOUT
Если в интерактивном командном интерпретаторе в качестве значения этой переменной установлено положительное целое число, то оно равно максимальному периоду в секундах, в течение которого командный интерпретатор ожидает ввода данных после вывода основного приглашения (S1). По истечении этого периода командный интерпретатор завершает работу.
TMPDIR
Каталог, в котором создаются временные файлы командного интерпретатора. Если этот параметр не установлен или не содержит абсолютный путь к каталогу с возможностью записи, то временные файлы создаются в каталоге в /tmp.
VISUAL
Если этот параметр установлен, он управляет режимом правки командной строки для интерактивных командных интерпретаторов. Если последний компонент пути, указанного в этом параметре, содержит строку emacs или gmacs, то включается режим правки emacs или gmacs (Gosling emacs) соответственно.

Замена тильды

Замена тильды, которая выполняется параллельно с подстановкой параметров, применяется к словам, начинающимся с неэкранированного символа ~. Символы, следующие за тильдой до первой косой черты (/), при их наличии, считаются именем входа в систему. Если имя входа в систему пусто или равно + или -, то подставляется значение параметра HOME, PWD или OLDPWD соответственно. В противном случае выполняется поиск имени входа в систему по файлу паролей, и выражение тильды заменяется на основной каталог пользователя. Если имя входа в систему в файле паролей не найдено или в этом имени обнаружено экранирование или подстановка какого-либо параметра, то подстановка не выполняется.

В присвоениях параметров (предшествующих простой команде или включенных в аргументы alias, export, readonly и typeset), замена тильды выполняется после любого неэкранированного двоеточия (:); имена входа в систему также разделяются двоеточиями.

Основной каталог предварительно раскрытых имен входа в систему кэшируется и используется повторно. Для просмотра списка, изменения и добавления псевдонимов каталогов в этот кэш используется команда alias -d. Пример:

alias -d fac=/usr/local/facilities; cd ~fac/bin

Раскрытие фигурных скобок (чередование)

Выражения в фигурных скобках, которые принимают следующую форму:

префикс{строка_1,...,строка_N}суффикс

раскрываются в N слов, каждое из которых является конкатенацией значений префикс, строка_i и суффикс. Например, выражение a{c,b{X,Y},d}e раскрывается в четыре слова: ace, abXe, abYe и ade. Как видно из примера, выражения в фигурных скобках могут быть вложенными, а результирующие слова не сортируются. Для раскрытия выражения в фигурных скобках должны содержать неэкранированную запятую (,), т.е. выражения {} и {foo} не раскрываются. Раскрытие фигурных скобок выполняется после подстановки параметров и до создания имени файла.

Шаблоны имен файлов

Шаблон имени файла представляет собой слово, содержащее один или несколько неэкранированных символов ? или * или последовательностей [...]. После раскрытия фигурных скобок командный интерпретатор заменяет шаблоны имен файлов на отсортированные имена всех файлов, совпадающие с шаблоном (если с шаблоном не совпадает ни один файл, то слово остается неизмененным). Элементы шаблона имеют следующие значения:

?
Совпадение с любым одним символом.
*
Совпадение с любой последовательностью символов.
[...]
Совпадение с любыми символами в скобках. Можно указать диапазоны символов. В этих целях два крайних символа разделяются символом -. Например, шаблон [a0-9] соответствует букве a или любой цифре. Для использования собственно символа - "как есть" необходимо либо экранировать его, либо использовать его как первый или последний символ в списке символов. Аналогичным образом, для использования символа ] "как есть", а не как завершающего символа списка, его необходимо экранировать или указать в начале списка.

Кроме того, символ !, указанный в начале списка, имеет особое значение (см. далее), поэтому для использования этого символа "как есть" следует его экранировать или поместить в конце списка.
[!...]
Аналогичен [...], за исключением того, что определяется соответствие любым символам, не указанным в скобках.
*(шаблон| ... |шаблон)
Соответствует любой строке символов, в которой не присутствует ни одного или присутствует несколько вхождений указанных шаблонов. Например, шаблону *(foo|bar) соответствует пустая строка, а также строки foo, bar, foobarfoo и т.д.
+(шаблон| ... |шаблон)
Соответствует любой строке символов, в которой присутствует один или несколько вхождений указанных шаблонов. Например, шаблону +(foo|bar) соответствуют строки foo, bar, foobarfoo и т.д.
?(шаблон| ... |шаблон)
Соответствует пустой строке или строке, содержащей один из указанных шаблонов. Например, шаблону ?(foo|bar) соответствуют только пустая строка и строки foo и bar.
@(шаблон| ... |шаблон)
Соответствует строке, включающей в себя один из указанных шаблонов. Например, шаблону @(foo|bar) соответствуют только строки foo и bar.
!(шаблон| ... |шаблон)
Соответствует строке, не содержащей ни один из указанных шаблонов. Пример: шаблону !(foo|bar) соответствуют все строки, за исключением строк foo и bar; шаблону !(*) не соответствует ни одна строка; шаблону !(?)* соответствуют все строки (информация для размышления).

Следует отметить, что в настоящее время ksh не выполняет сравнение . и .., однако в исходном ksh, Bourne sh и bash сравнение этих символов предусмотрено, поэтому в существующее поведение могут быть внесены изменения.


Caution: Кроме того, ни одному из упомянутых элементов шаблонов не соответствует точка (.) в начале имени файла и косая черта (/), даже если они явно указаны в последовательности [...]; кроме того, ни одному шаблону не соответствуют имена . и .., даже при вводе .*.

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


Note: Классы символов POSIX (т.е. [:имя_класса:] в выражении [...]) в настоящее время не реализованы.

Перенаправление ввода/вывода

При выполнении команды ее стандартные потоки ввода, вывода и ошибок (дескрипторы файлов 0, 1 и 2 соответственно) обычно наследуются от командного интерпретатора. Три исключения из этого правила: команды в конвейерах, для которых стандартные потоки ввода и стандартные потоки вывода устанавливаются конвейером; асинхронные команды, создаваемые при отключенном управлении заданиями, для которых изначально устанавливается стандартный поток ввода /dev/null; команды, для которых применяются следующие перенаправления:

> файл
Перенаправить стандартный поток вывода в файл file. Если файл не существует, он будет создан; если он существует и является обычным файлом, для которого установлена опция noclobber, то возникает ошибка, в противном случае файл усекается. Обратите внимание, что это означает, что команда cmd < foo > foo открывает foo для чтения и затем усекает его при открытии для записи до того, как cmd получит возможность его прочитать.
>| файл
Аналогично >, но файл усекается даже в том случае, если установлена опция noclobber.
>> файл
Аналогично >, но существующий файл не усекается, а дополняется. Кроме того, файл открывается в режиме дополнения, поэтому запись всегда производится в конец файла (см. описание функции open()).
< файл
Стандартный поток ввода перенаправляется из файла, который открывается для чтения.
<> файл
Аналогично <, но файл открывается для чтения и записи.
<< маркер
После считывания командной строки, содержащей этот вид перенаправления (называемый встроенный документ), командный интерпретатор копирует строки из источника команд во временный файл до тех пор, пока не считает строку, совпадающую с маркером. При выполнении команды стандартный поток ввода перенаправляется из временного файла.

Note: Строка в конце "встроенного документа" должна точно совпадать с маркером; в ней не должно быть начальных или завершающих пробельных символов.

Если маркер не содержит экранированные символы, то содержимое временного файла каждый раз при выполнении команды обрабатывается так, как если бы оно было заключено в двойные кавычки, поэтому выполняется подстановка параметров, команд и арифметическая подстановка, а также экранирование обратной косой чертой (\) символов $, `, \ и \новая_строка. Если в одной командной строке указано несколько "встроенных документов", то они сохраняются в порядке следования.
<<- маркер
Аналогично <<, но из строк "встроенного документа" удаляются ведущие символы табуляции.
<& fd
Стандартный поток ввода дублируется из дескриптора файла fd. fd может представлять собой одну цифру, обозначающую номер существующего дескриптора файла, букву p, указывающую на то, что дескриптор файла связан с потоком вывода текущего сопроцесса, или символ -, указывающий на то, что стандартный поток ввода следует закрыть.
>& fd
Аналогично <&, но операция выполняется для стандартного потока вывода.

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

В случае простых команд перенаправления можно располагать в любом месте; в составных командах (таких как операторы if и др.) все перенаправления следует помещать в конец. Перенаправления обрабатываются после создания конвейеров и в порядке их создания, поэтому команда:

cat /foo/bar 2>&1 > /dev/null | cat -n

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

Арифметические выражения

Целочисленные арифметические выражения можно использовать в сочетании с командой let, в выражениях $((...)), в ссылках на массивы (например, имя[выражение]), в качестве численных аргументов команды test, а также как значения для присвоения целочисленному параметру.

Выражения могут содержать буквенно-цифровые идентификаторы параметров, ссылки на массивы и целочисленные константы. Выражения можно комбинировать со следующими операторами языка C (перечислены и сгруппированы по возрастанию приоритета):

Унарные операторы
+ - ! ~ ++ --
Бинарные операторы
,
= *= /= %= += -= <<= >>= &= ^= |=
||
&&
|
^
&
== !=
< <= >= >
<< >>
+ -
* / %
Тернарный оператор
?: (по сравнению с присвоением приоритет выше).
Операторы группирования
( )

Можно указывать целочисленные константы с произвольными основаниями с помощью нотации основание#число, где основание – десятичное число основания, число – число в указанном основании.

Операторы анализируются следующим образом:

Унарный +
Результатом является аргумент (включается для полноты).
Унарный -
Отрицание.
!
Логическое НЕ; результатом является 1, если аргумент равен нулю, и 0 в противном случае.
~
Арифметическое (поразрядное) НЕ.
++
Инкремент; применяется к параметру (не буквенному или другому выражению) – параметр увеличивается на 1. При использовании в качестве префиксного оператора результатом будет увеличенное значение параметра; при использовании в качестве постфиксного оператора результатом будет первоначальное значение параметра.
--
Декремент; но параметр не увеличивается, а уменьшается на 1.
,
Разделяет два арифметических выражения; сначала анализируется левая часть, затем правая. Результатом является значение правой части выражения.
=
Присвоение; для переменной в левой части устанавливается значение правой части.
*= /= %= += -= <<= >>= &= ^= |=
Операторы присваивания:
переменная оператор= выражение

аналогично:
переменная = переменная оператор ( выражение )
||
Логическое ИЛИ; результатом является 1, если любой из аргументов отличен от нуля, и 0 в противном случае. Аргумент в правой части анализируется только в том случае, если аргумент в левой части равен нулю.
&&
Логическое И; результатом является 1, если оба аргумента отличны от нуля, и 0 в противном случае. Аргумент в правой части анализируется только в том случае, если аргумент в левой части отличен от нуля.
|
Арифметическое (поразрядное) ИЛИ.
^
Арифметическое (поразрядное) исключающее ИЛИ.
&
Арифметическое (поразрядное) И.
==
Равно; результатом является 1, если аргументы равны, и 0 в противном случае.
!=
Не равно; результатом является 0, если аргументы равны, и 1 в противном случае.
<
Меньше; результатом является 1, если аргумент в левой части меньше аргумента в правой, и 0 в противном случае.
<= >= >
Меньше или равно, больше или равно, больше. См. описание <.
<< >>
Сдвиг влево (вправо); результатом является аргумент в левой части, разряды которого смещены влево (вправо) на число позиций, указанное аргументом в правой части.
+ - * /
Сложение, вычитание, умножение, деление.
%
Остаток; результатом является остаток от деления аргумента в левой части на аргумент в правой. Если оба аргумента являются отрицательными, то знак результата не указывается.
аргумент_1 ? аргумент_2 : аргумент_3
Если аргумент_1 отличен от нуля, то результатом будет аргумент_2, в противном случае – аргумент_3.

Сопроцессы

Сопроцесс, т.е. конвейер, созданный посредством оператора |&, представляет собой асинхронный процесс, причем командный интерпретатор может как выполнять запись в него (команда print -p), так и чтение из него (команда read -p). Потоками ввода и вывода сопроцесса можно манипулировать с помощью перенаправлений >&p и <&p соответственно. После запуска одного сопроцесса запустить другой невозможно до завершения работы первого сопроцесса или перенаправления потока ввода сопроцесса посредством перенаправления exec n>&p. Если поток ввода сопроцесса перенаправлен описанным способом, то следующий запускаемый сопроцесс будет совместно использовать поток вывода с первым сопроцессом, если поток вывода исходного сопроцесса не будет перенаправлен с помощью перенаправления exec n<&p.

Некоторые замечания по сопроцессам:

Функции

Функции определяются с использованием синтаксиса командного интерпретатора Korn функция имя или синтаксиса командного интерпретатора Bourne/POSIX имя() (см. описание различий между этими двумя формами далее). Функции похожи на .-сценарии в том, что они выполняются в текущем окружении, однако, в отличие от последних, в пределах функций аргументы командного интерпретатора (т.е. позиционные параметры – $1 и т.д.) являются невидимыми. Когда командный интерпретатор определяет местоположение команды, поиск функций осуществляется после поиска специальных встроенных команд, но до поиска стандартных и нестандартных встроенных команд и поиска по переменной PATH.

Существующую функцию можно удалить командой unset -f имя_функции. Просмотреть список функций можно с помощью команды typeset +f, а список определений функций – с помощью команды typeset -f. С помощью команды autoload (псевдоним команды typeset -fu) можно создавать неопределенные функции; при выполнении неопределенной функции командный интерпретатор выполняет поиск файла с именем, совпадающим с именем функции, по пути, указанному в параметре FPATH, и, если функция найдена, считывает и выполняет ее. Если после выполнения файла обнаруживается, что эта функция определена, то она выполняется, в противном случае продолжается обычный процесс поиска команд (т.е. командный интерпретатор осуществляет поиск по таблице стандартных встроенных команд и в переменной PATH). Следует отметить, что в том случае, если команда не найдена по значению параметра PATH, то командный интерпретатор выполняет попытку автоматической загрузки функции с использованием параметра FPATH (недокументированная функция исходного командного интерпретатора Korn).

Функции могут иметь два атрибута – trace и export, которые устанавливаются с помощью typeset -ft и typeset -fx. При выполнении отслеживаемой функции опция xtrace командного интерпретатора включается на время выполнения функции, в противном случае опция xtrace остается выключенной. Атрибут экспорта в функциях в настоящее время не используется. В исходном командном интерпретаторе Korn экспортированные функции являются видимыми для выполняемых сценариев командного интерпретатора.

Функции выполняются в окружении текущего командного интерпретатора, поэтому присвоения параметров, выполняемые в функциях, становятся видимыми только после выполнения функции. Если такое поведение не требуется, можно создать локальный параметр внутри функции посредством команды typeset. Следует отметить, что обеспечить видимость специальных параметров (таких как $$, $!) таким образом невозможно.

Статусом завершения функции является статус последней команды, выполненной в этой функции. Функцию можно завершить немедленно с помощью команды return; эту команду также можно использовать для явной установки статуса завершения.

Функции, определенные зарезервированным словом function, обрабатываются со следующими отличиями от функций, определенных нотацией ():

В будущем также будут добавлены следующие отличия:

Режим POSIX

Этот командный интерпретатор разрабатывался как POSIX-совместимый, однако в некоторых случаях поведение в соответствии с POSIX противоречит поведению исходного командного интерпретатора Korn или является неудобным для пользователя. Поведение командного интерпретатора в таких ситуациях определяется состоянием опции posix ( set -o posix); если она установлена, то соблюдаются положения POSIX, в противном случае они не соблюдаются. Если в окружении содержится параметр POSIXLY_CORRECT, то при запуске командного интерпретатора опция posix устанавливается автоматически. (Кроме того, командный интерпретатор может быть скомпилирован таким образом, что он будет работать в режиме POSIX по умолчанию, однако это, как правило, нежелательно.)

Далее приведен список зависимостей от состояния опции posix:

\" внутри подстановок команд \`...\` в двойных кавычках
В режиме POSIX символ " интерпретируется при интерпретации команды; в режиме, отличном от POSIX, обратная косая черта удаляется до интерпретации подстановки команды. Например, результатом команды echo "`echo \"hi\"`" будет "hi" в режиме POSIX и hi в режиме, отличном от POSIX. Во избежание проблем следует применять форму подстановки команд $(...).
Выходные данные kill -l
В режиме POSIX имена сигналов приводятся по одному на строке; в режиме, отличном от POSIX, номера сигналов, имена и описания выводятся в столбцах. В будущем может быть добавлена новая опция (например, -v) для дифференциации этих двух вариантов поведения.
Статус завершения fg
В режиме POSIX при отсутствии ошибок статус завершения равен 0; в режиме, отличном от POSIX, статус завершения равен статусу последнего приоритетного задания.
getopts
В режиме POSIX опции должны начинаться с -; в режиме, отличном от POSIX, опции могут начинаться с - или +.
Раскрытие фигурных скобок (также называемое чередованием)
В режиме POSIX раскрытие фигурных скобок деактивировано; в режиме, отличном от POSIX, оно разрешено. Следует отметить, что с помощью команды set -o posix (или в результате установки параметра POSIXLY_CORRECT) автоматически отключается опция braceexpand, однако впоследствии ее можно включить явно.
set -
В режиме POSIX не выполняется очистка опций verbose или xtrace; в режиме, отличном от POSIX, очистка выполняется.
Статус завершения set
В режиме POSIX статус завершения set при отсутствии ошибок равен 0; в режиме, отличном от POSIX, статус завершения равен статусу завершения подстановок команд, выполненных при создании команды установки параметров. Например, команда set -- `false`; echo $? выводит 0 в режиме POSIX и 1 в режиме, отличном от POSIX. Такая конструкция используется в большинстве сценариев командного интерпретатора, в которых применяется устаревшая команда getopt.
Раскрытие аргументов команд alias, export, readonly и typeset
В режиме POSIX выполняется стандартное раскрытие аргументов; в режиме, отличном от POSIX, не разрешено разделение на поля, сравнение с шаблонами имен файлов, раскрытие фигурных скобок и замена тильды (стандартной), но разрешена замена тильды присвоения.
Ввод сигналов
В режиме POSIX указывать сигналы цифрами можно только в том случае, если номера сигналов соответствуют значениям POSIX (например, SIGHUP=1, SIGINT=2, SIGQUIT=3, SIGABRT=6, SIGKILL=9, SIGALRM=14, и SIGTERM=15); в режиме, отличном от POSIX, сигналы можно указывать цифрами в любом случае.
Раскрытие псевдонимов
В режиме POSIX раскрытие псевдонимов выполняется только при считывании командных слов; в режиме, отличном от POSIX, раскрытие псевдонимов выполняется для любого слова, следующего за псевдонимом через пробел. Например, в цикле for:
alias a='for ' i='j' a i in 1 2; do echo i=$i j=$j; done

используется параметр i в режиме POSIX и параметр j в режиме, отличном от POSIX.
Тестирование
В режиме POSIX выражение -t (перед которым указано несколько аргументов !) всегда истинно, поскольку оно является строкой ненулевой длины; в режиме, отличном от POSIX, тестирование завершается успешно, если дескриптор файла 1 соответствует терминалу ввода-вывода (т.е. можно пропустить аргумент fd для тестирования -t, и ему будет присвоено значение по умолчанию 1).

Выполнение команд и встроенные команды

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

  1. Специальная встроенная команда
  2. Функция
  3. Стандартная встроенная команда
  4. Поиск имени исполняемого файла осуществляется по параметру PATH.

Специальные встроенные команды отличаются от других команд тем, что для их поиска не используется параметр PATH, ошибка при их выполнении может привести к завершению работы неинтерактивного командного интерпретатора, а присвоения параметров, заданные до выполнения команды, после ее выполнения сохраняются. Иными словами, если опция posix выключена (см. описание команды set далее), то некоторые специальные команды проявляют следующую особенность – к аргументам, похожим на присвоения, не применяется разделение на поля, сравнение с шаблонами имен файлов, раскрытие фигурных скобок и замена тильды. Стандартные встроенные команды отличаются только тем, что для их поиска не используется параметр PATH.

Исходный ksh и POSIX несколько отличаются определением специальных и стандартных команд.

В будущем обработка дополнительных специальных и стандартных команд ksh может стать отличной от обработки специальных и стандартных команд POSIX.

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

Встроенная команда . (точка)

. файл [аргумент ...]

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

Встроенная команда : (пусто)

: [ ... ]

Пустая команда. Устанавливается нулевой статус завершения.

Встроенная команда alias

alias [ -d | +-t [-r] ] [+-px] [+-] [имя[=значение] ...]

При отсутствии аргументов командой alias выводится список всех псевдонимов. Для любого имени без значения выводится существующий псевдоним. Любое имя со значением определяет псевдоним (см. раздел Псевдонимы).

Список псевдонимов представлен в одном из следующих двух форматов.

Кроме того, если указана опция -p, то перед каждым псевдонимом выводится строка alias .

Посредством опции -x устанавливается (опцией +x удаляется) атрибут экспорта псевдонима, или, если не указаны имена, выводится список псевдонимов с атрибутом экспорта (экспорт псевдонима не выполняется).

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

Опция -d используется для вывода списка или установки псевдонимов каталогов, используемых при замене тильды (см. раздел Замена тильды).

Встроенная команда bg

bg [задание ...]

Возобновить выполнение указанного остановленного задания (заданий) в фоновом режиме. Если задания не указаны, используется %+. Эта команда доступна только в системах с поддержкой управления заданиями. Для получения дополнительной информации см. раздел Управление заданиями.

Встроенная команда bind

bind [-m] [ключ[=команда_правки] ...]

Установить или просмотреть текущую привязку клавиш/макросы emacs. Полное описание приведено в разделе Интерактивная правка строк ввода emacs.

Встроенная команда break

break [уровень]

Завершить внутренний цикл for, select, until или while на указанном уровне. По умолчанию значение уровень равно 1.

Встроенная команда builtin

builtin команда [аргумент ...]

Выполнить встроенную команду команда. Целесообразно использовать в целях явного выполнения встроенных версий команд (таких как kill), также доступных в виде исполняемых файлов.

Встроенная команда cd

cd [-LP] [каталог]

Установить каталог как рабочий. Если установлен параметр CDPATH, то выводится путь поиска для каталога, содержащего каталог. Пустой путь указывает на текущий каталог. Если значение каталог отсутствует, то используется основной каталог $HOME. Если каталог имеет значение -, то используется предыдущий рабочий каталог (см. описание параметра OLDPWD). Если используется опция -L (логический путь) или не установлена опция physical (см. описание команды set далее), то ссылки на .. в каталоге являются относительными по отношении к пути, используемому для перехода к этому каталогу. Если указана опция -P (физический путь) или установлена опция physical, то .. является относительным по отношению к дереву каталогов файловой системы. Параметры PWD и OLDPWD обновляются для обеспечения соответствия текущему и предыдущему рабочим каталогам соответственно.

cd [-LP] старый новый

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

Встроенная команда command

command [-pvV] команда [аргумент ...]

Если не указана опция -v или -V, то команда выполняется так, как если бы команда command не была вызвана, с двумя исключениями:

Если указана опция -p, то вместо текущего значения PATH используется путь поиска по умолчанию. Фактическое значение пути по умолчанию зависит от системы: в системах POSIX оно соответствует значению, возвращенному командой:

getconf _CS_PATH

Если указана опция -v, то вместо выполнения команды выводится информация об исполняемом объекте (это же действие выполняется для аргумента ...): для специальных и стандартных встроенных команд и функций выводятся их имена, для псевдонимов выводится определяющая их команда, для команд, найденных в результате поиска по параметру PATH, выводится полный путь к команде. Если команда не найдена, (т.е. поиск пути завершился неуспешно), то информация не выводится и команда command завершает работу со статусом завершения, отличным от нуля. Опция -V аналогична опции -v, только уровень вывода подробной информации будет более высоким.

Встроенная команда continue

continue [уровень]

Перейти к началу цикла for, select, until или while на указанном уровне. По умолчанию значение уровень равно 1.

Встроенная команда echo

echo [-neE] [аргумент ...]

Вывести аргументы (с разделением пробелами) в стандартный поток вывода, после каждого аргумента добавить символ новой строки. Если любой из аргументов содержит управляющую последовательность (с обратной косой чертой) \c, то символ новой строки подавляется. Список других распознаваемых управляющих последовательностей с обратной косой чертой приведен в описании команды print далее.

Опции, реализованные для совместимости со сценариями командного интерпретатора BSD: -n – подавление завершающего символа новой строки, -e – включение интерпретации обратной косой черты (холостая команда, поскольку, как правило, так и происходит), -E – подавление интерпретации обратной косой черты.

Эта команда также доступна как исполняемый файл; см. описание команды echo.

Встроенная команда eval

eval команда ...

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

Встроенная команда exec

exec [команда [аргумент ...]]

Выполнить команду без создания порожденного процесса системным вызовом fork(), с заменой процесса командного интерпретатора.

Если аргументы не указаны, любое перенаправление ввода-вывода будет фиксированным, и командный интерпретатор не заменяется. Любые дескрипторы файлов более 2, открываемые или дублируемые (dup) таким образом, не будут доступными для других выполняемых команд (т.е. команд, не встроенных в командный интерпретатор). Следует отметить, что в командном интерпретаторе Bourne имеется отличие: он не передает эти дескрипторы файлов.

Встроенная команда exit

exit [статус]

Завершение работы командного интерпретатора с указанным статусом завершения. Если статус не указан, то статусом завершения будет текущее значение параметра ?.

Встроенная команда export

export [-p] [параметр[=значение]] ...

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

Если параметры не указаны, то выводится список всех параметров с атрибутом экспорта по одному на строке. Если указана опция -p, то в этом случае выводится список команд export, определяющих все экспортируемые параметры, с соответствующими значениями.

Встроенная команда false

false

Команда, завершающая работу со статусом, отличным от нуля.

Эта команда также доступна как исполняемый файл; см. раздел false.

Встроенная команда fc

fc [-e редактор | -l [-n]] [-r] [первый [последний]]

Аргументы первый и последний используются для выбора команд в истории. Можно выбрать команды по номеру в истории или ввести строку, указывающую на последнюю команду, начинающуюся с этой строки. При использовании опции -l список команд выводится в стандартный поток вывода stdout, опция -n подавляет номера команд по умолчанию. Опция -r изменяет порядок в списке на противоположный. Если опция -l не указана, то выполняется правка выбранных команд в редакторе, указанном в опции -e, а если опция -e не задана, то в редакторе, указанном в параметре FCEDIT (если этот параметр также не установлен, используется /bin/ed), после чего эти команды выполняются командным интерпретатором.

fc [-e - | -s] [-g] [старый=новый] [префикс]

Повторное выполнение выбранной команды (по умолчанию – предыдущей команды) после выполнения дополнительной подстановки значения новый вместо старый. Если указана опция -g, то все вхождения значения старый заменяются на значение новый. Вызов этой команды обычно выполняется с предварительно определенным псевдонимом:

r='fc -e -'

Встроенная команда fg

fg [задание ...]

Возобновить выполнение указанного задания (заданий) в приоритетном режиме. Если задания не указаны, используется %+. Эта команда доступна только в системах с поддержкой управления заданиями. Для получения дополнительной информации см. раздел Управление заданиями.

Встроенная команда getopts

getopts доп_строка имя [аргумент ...]

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

Каждый раз при вызове команда getopts помещает следующую опцию в параметр командного интерпретатора с указанным именем, а индекс следующего обрабатываемого аргумента – в параметр командного интерпретатора OPTIND. Если опция начинается со знака +, то перед опцией, указанной аргументом имя, указывается префикс +. Если для опции требуется указать аргумент, то команда getopts помещает его в параметр командного интерпретатора OPTARG. При обнаружении некорректной опции или отсутствующего аргумента в параметр имя помещается вопросительный знак или двоеточие (означающие некорректную опцию или отсутствие аргумента соответственно), и для параметра OPTARG устанавливается значение символа опции, являющегося причиной проблемы. Если значение доп_строка начинается не с двоеточия, то в стандартный поток ошибок выводится сообщение об ошибке.

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

Для сброса синтаксического анализа опций можно установить для OPTIND значение 1 (при вызове командного интерпретатора или его процедуры это действие выполняется автоматически).


Caution: Изменение значения параметра командного интерпретатора OPTIND на значение, отличное от 1, или продолжение синтаксического анализа аргументов без сброса параметра OPTIND может привести к непредвиденным результатам.

Встроенная команда hash

hash [-r] [имя ...]

При отсутствии аргументов – вывести список путевых имен хэшированных исполняемых команд. Если опция -r указана, то все хэшированные команды удаляются из хэш-таблицы. Если указаны какие-либо имена, то командный интерпретатор выполняет поиск каждого из них как имени команды; если имя соответствует исполняемой команде, то оно добавляется в хэш-таблицу.

Встроенная команда jobs

jobs [-lpn] [задание ...]

Вывести информацию об указанных заданиях; если задания не указаны, отображаются все задания. Если указана опция -n, то выводится информация только по тем заданиям, статус которых изменился с момента последнего уведомления. Если указана опция -l, то дополнительно выводится идентификатор каждого процесса в задании. Если указана опция -p, то выводятся только группы процессов каждого задания. Для получения информации о формате задания и выводимого задания см. раздел Управление заданиями.

Встроенная команда kill

kill [-s имя_сигнала | "номер_сигнала | -имя_сигнала ] { задание | идентификатор_процесса | -группа_процессов } ...

Послать указанный сигнал указанным заданиям, идентификаторам процессов или группам процессов. Если сигнал не указан, то посылается сигнал TERM. Если указано задание, то сигнал посылается группе процессов этого задания. Для получения информации о формате задания см. раздел Управление заданиями.

kill -l [статус_завершения ...]

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

Эта команда также доступна как исполняемый файл; см. описание команды kill.

Встроенная команда let

let [выражение ...]

Проанализировать каждое из указанных выражений (см. раздел Арифметические выражения). Если все выражения успешно проанализированы, устанавливается следующий статус завершения:

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

Поскольку для выражений может потребоваться экранирование, для let "выражение" можно использовать синтаксисический прием (( выражение )).

Встроенная команда print

print [-nprsun | -R [-en]] [аргумент ...]

Вывести аргументы в стандартный поток вывода с разделением пробелами. После аргументов добавить символы новой строки. Если указана опция -n, то символ новой строки подавляется. По умолчанию выполняется трансляция некоторых управляющих последовательностей из языка C. Транслируются следующие управляющие последовательности: \b, \f, \n, \r, \t, \v и \0### (# является восьмеричной цифрой и может принимать значения от 0 до 3). Применение \c эквивалентно использованию опции -n. С помощью опции -r можно запретить раскрытие обратной косой черты. Если указана опция -s, то вывод направляется в файл истории (не в стандартный поток вывода), если указана опция -u – в дескриптор файла n (если значение n не указано, используется значение по умолчанию 1), если указана опция -p – в сопроцесс (см. раздел Сопроцессы).

Опция -R используется для эмуляции (в определенной степени) команды "echo" в BSD, которая обрабатывает последовательности с символом \ только в том случае, если указана опция -e. Как и в предыдущем случае, опция -n подавляет завершающий символ новой строки.

Встроенная команда pwd

pwd [-LP]

Вывести текущий рабочий каталог. Если указана опция -L или не установлена опция physical (см. описание команды set ниже), то выводится логический путь (т.е. путь, используемый для перехода в текущий каталог посредством команды cd). Если указана опция -P (физический путь) или установлена опция physical, то выводится путь, определенный на основе файловой системы (путем перехода по каталогам .. в корневой каталог).

Эта команда также доступна как исполняемый файл; см. описание команды pwd.

Встроенная команда read

read [-prsun] [параметр ...]

Считать строку ввода из стандартного потока ввода, разделить строку на поля с использованием параметра IFS (см. раздел Подстановка) и присвоить значение каждого поля указанным параметрам. Если параметров больше, чем полей, то оставшимся параметрам присваивается пустое значение; если полей больше, чем параметров, то значения оставшихся полей присваиваются последнему параметру (включая все разделительные пробелы). Если параметры не указаны, используется параметр REPLY. Если строка ввода заканчивается обратной косой чертой и опция -r не указана, то обратная косая черта и символ новой строки удаляются и считываются следующие входные данные. Если данные не были считаны, работа команды read завершается с ненулевым статусом завершения.

В качестве первого параметра можно указать строку с вопросительным знаком перед ней; в этом случае указанная строка используется как приглашение (выводится в стандартный поток ошибок перед чтением любых входных данных), если устройством ввода является терминал ввода-вывода (например, read nfoo?'number of foos: ').

Если указаны опции -un и -p, то входные данные считываются из дескриптора файла n или текущего сопроцесса (подробное описание см. в разделе Сопроцессы) соответственно. Если указана опция -s, то входные данные сохраняются в файл истории.

Встроенная команда readonly

readonly [-p] [параметр[=значение]] ...

Установить для указанных параметров атрибут "только для чтения". Если указаны значения, то они присваиваются параметрам до установки этого атрибута. Значение параметра с атрибутом "только для чтения" невозможно сбросить или изменить.

Если параметры не указаны, то выводится список всех параметров с атрибутом "только для чтения" по одному на строке. Если указана опция -p, то в этом случае выводится список команд readonly, определяющих все параметры "только для чтения", с соответствующими значениями.

Встроенная команда return

return [статус]

Вернуть результат функции или .-сценария со статусом завершения статус. Если статус не указан, используется статус завершения последней выполненной команды. При использовании вне функции или .-сценария действие этой команды аналогично действию команды exit. Следует отметить, что ksh обрабатывает профиль и файлы $ENV как .-сценарии, тогда как исходный командный интерпретатор Korn обрабатывает как .-сценарии только профили.

Встроенная команда set

set [+-abCefhiklmnprsuvxX] [+-o [опция]] [+-A имя] [--] [аргумент ...]

С помощью команды set можно устанавливать (-) и отключать (+) опции командного интерпретатора, определять позиционные параметры и устанавливать параметры-массивы. Синтаксис изменения опций может быть следующим: +-o опция, где опция – полное имя опции; __+-__буква, где буква – однобуквенное имя опции (предусмотрено не для всех опций). В следующей таблице приведены обе буквы опции (если они существуют), полные имена и описания действий, выполняемых при использовании этих опций.

Буква / Полное имя / Описание:

-A
Определить элементы параметра-массива имя как аргумент ...; если указана опция -A, то массив сначала сбрасывается (очищается); если указана опция +A, определяются первые N элементов (где N равно числу аргументов), остальные элементы не изменяются.
-a
allexport
Создать все новые параметры с атрибутом экспорта
-b
notify
Вывести сообщения с уведомлением о заданиях асинхронно (не перед выводом приглашения). Используется только при включенном управлении заданиями (-m).
-C
noclobber
Запретить перенаправлению > перезаписывать существующие файлы (для принудительной перезаписи следует использовать >|).
-e
errexit
Немедленно завершать работу (после внутреннего прерывания ERR) при возникновении ошибки или неуспешном выполнении команды (т.е. завершении ее работы со статусом завершения, отличным от нуля). Не применяется к командам, статус завершения которых проверяется непосредственно конструкцией командного интерпретатора, например операторами if, until, while, && или ||.
-f
noglob
Не раскрывать шаблоны имен файлов.
-h
trackall
Создать отслеживаемые псевдонимы для всех выполняемых команд (см. раздел Псевдонимы). Для неинтерактивных командных интерпретаторов включена по умолчанию.
-i
interactive
Активировать интерактивный режим. Эта опция может быть установлена/сброшена только при вызове командного интерпретатора.
-k
keyword
Распознавать присвоения параметров в любой позиции в команде.
-l
login
Этот командный интерпретатор является начальным командным интерпретатором, который можно установить/сбросить только при вызове командного интерпретатора (см. раздел Запуск командного интерпретатора).
-m
monitor
Активировать управление заданиями (значение по умолчанию для интерактивных командных интерпретаторов).
-n
noexec
Не выполнять никаких команд. Целесообразно использовать для проверки синтаксиса сценариев (в интерактивном режиме игнорируется).
-p
privileged
Устанавливается автоматически, если при запуске командного интерпретатора реальный идентификатор пользователя или группы не совпадает с эффективным. Подробное описание приведено в разделе Запуск командного интерпретатора.
-r
restricted
Активировать ограниченный режим. Эта опция используется только при вызове командного интерпретатора. Подробное описание приведено в разделе Запуск командного интерпретатора.
-s
stdin
Если указана при вызове командного интерпретатора, то команды считываются из стандартного потока ввода. Устанавливается автоматически при вызове командного интерпретатора без аргументов.

При использовании опции -s в команде set указанные аргументы сортируются до присвоения позиционным параметрам (или массиву имя в случае использования опции -A).
-u
nounset
Если не используется модификатор -, + или =, то ссылка на неустановленный параметр обрабатывается как ошибка.
-v
verbose
Записать входные данные командного интерпретатора в стандартный поток ошибок при считывании.
-x
xtrace
Вывести присвоения команд и параметров при их выполнении; перед ними указать значение PS4.
-X
markdirs
При создании имен файлов помечать каталоги конечным символом /.
bgnice
Фоновые задания выполняются с более низким приоритетом.
braceexpand
Разрешить раскрытие фигурных скобок (чередование).
emacs
Разрешить правку командной строки BRL типа emacs (только для интерактивных командных интерпретаторов); см. раздел Интерактивная правка строк ввода emacs.
gmacs
Разрешить правку командной строки типа gmacs (Gosling emacs; только для интерактивных командных интерпретаторов); в настоящее время эквивалентна правке emacs, за исключением незначительных отличий в механизме перемещения (Ctrl - T).
ignoreeof
Командный интерпретатор не завершает работу при считывании признака конца файла; необходимо выполнить команду exit.
nohup
Не уничтожать выполняемые задания по сигналу SIGHUP при наличии начального командного интерпретатора. В настоящее время устанавливается по умолчанию, но в будущем эта опция будет изменена для обеспечения совместимости с исходным интерпретатором Korn (в котором эта опция отсутствует, но передача сигнала SIGHUP выполняется).
nolog
Не действует – в исходном интерпретаторе Korn предотвращает сохранение определений функций в файле истории.
physical
Использовать при выполнении команд cd и pwd физические каталоги (т.е. каталоги файловой системы) .., а не логические (т.е. командный интерпретатор обрабатывает .., что позволяет пользователю не учитывать символьные ссылки на каталоги). По умолчанию сброшена. Обратите внимание на то, что установка этой опции не влияет на текущее значение параметра PWD; значение параметра PWD изменяется только при использовании командыcd. Для получения подробной информации см. описание команд cd и pwd выше.
posix
Активировать режим POSIX. См. раздел Режим POSIX.

Эти опции также можно использовать при вызове командного интерпретатора. Текущий набор опций (с короткими именами из одной буквы) можно просмотреть с помощью параметра -. Команда set -o без имени опции выводит список всех опций с информацией о том, активирована или деактивирована каждая из них; команда set +o выводит длинные имена всех опций, активированных в данный момент.

Остальные аргументы (при наличии) являются позиционными параметрами и присваиваются в соответствующем порядке позиционным параметрам (т.е. 1, 2 и т.д.). Если опции оканчиваются символом --, а остальные аргументы отсутствуют, удаляются значения всех позиционных параметров. Если опции или аргументы не заданы, то выводятся значения всех имен. По неизвестным историческим причинам опция - обрабатывается особым образом: она отменяет опции -x и -v.

Встроенная команда shift

shift [номер]

Имена позиционных параметров номер+1, номер+2 ... изменяются на 1, 2 и т.д. По умолчанию значение номер равно 1.

Встроенная команда test или [

test выражение

или:

[ выражение ]

Проанализировать выражение и вернуть статус 0, если оно истинно, статус 1, если оно ложно, и статус больше 1 в случае ошибки. Как правило, используется в качестве команды условия для операторов if и while.


Note: Вызов исполняемого файла test является распространенной ошибкой. Если путь к файлу не указан, выполняется встроенная команда.

Доступны следующие элементарные выражения:

str
Для выражения str определена ненулевая длина. Обратите внимание на возможность возникновения проблем в том случае, если str используется как оператор (например, -r). В большинстве ситуаций рекомендуется применить тестирование:
[ X"str" != X ]

(двойные кавычки используются в случае, если str содержит пробелы или символы сравнения с шаблоном имен файлов).
-r файл
Файл существует и доступен для чтения.
-w файл
Файл существует и доступен для записи.
-x файл
Файл существует и является исполняемым.
-a файл
Файл существует.
-e файл
Файл существует.
-f файл
Файл является обычным файлом.
-d файл
Файл является каталогом.
-c файл
Файл является байт-ориентированным специальным устройством.
-b файл
Файл является блок-ориентированным специальным устройством.
-p файл
Файл является именованным каналом.
-u файл
Для режима файла установлен бит setuid.
-g файл
Для режима файла установлен бит setgid.
-k файл
Установить sticky-бит для режима файла.
-s файл
Файл не является пустым.
-O файл
Владельцем файла является пользователь командного интерпретатора с эффективным идентификатором.
-G файл
Файл входит в группу командного интерпретатора с эффективным идентификатором.
-h файл
Файл является символьной ссылкой.
-H файл
Файл является контекстно-зависимым каталогом (целесообразно использовать только в HP-UX).
-L файл
Файл является символьной ссылкой. Аналогично -h.
-S файл
Файл является сокетом.
-o опция
Установлена опция командного интерпретатора (список опций приведен в описании команды set выше). Как нестандартное расширение, если опция начинается с !, тестирование завершается неуспешно; если опция не существует, то тестирование в любом случае завершается неуспешно (например:
[ -o foo -o -o !foo ]

истинно только в том случае, если опция foo существует).
файл -nt файл
Первый файл создан позже, чем второй файл.
файл -ot файл
Первый файл создан раньше, чем второй файл.
файл -ef файл
Первый файл идентичен второму файлу.
-t [идентификатор_файла]
Дескриптор файла – терминал ввода-вывода. Если опция posix (set -o posix, см. раздел Режим POSIX) не установлена, то аргумент fd можно пропустить. В этом случае для него устанавливается значение 1 (это поведение отличается вследствие применения особых правил POSIX, описанных далее).
строка
Строка не является пустой.
-z строка
Строка является пустой.
-n строка
Строка не является пустой.
строка = строка
Строки идентичны.
строка == строка
Строки идентичны.
строка != строка
Строки не являются идентичными.
число -eq число
Числа идентичны.
число -ne число
Числа не являются идентичными.
число -ge число
Первое число больше второго или равно ему.
число -gt число
Первое число больше второго числа.
число -le число
Первое число меньше второго или равно ему.
число -lt число
Первое число меньше второго.

Описанные выше элементарные выражения, в которых приоритет унарных операторов выше, чем приоритет бинарных операторов, можно объединить с помощью следующих операторов (список приведен по возрастанию приоритета):

выражение -o выражение
Логическое ИЛИ.
выражение -a выражение
Логическое И.
! выражение
Логическое НЕ.
( выражение )
Группирование.

В операционных системах без поддержки устройств /dev/fd/n (n соответствует номеру дескриптора файла) команда test осуществляет попытку создать фиктивное устройство для всех тестов, выполняемых для файлов (кроме -e). Таким образом, тестирование [ -w /dev/fd/2 ] завершается успешно, если дескриптор файла 2 доступен для записи.

Обратите внимание на то, что если число аргументов для test или [ ... ] меньше пяти, применяются специальные правила (согласно POSIX): если ведущие аргументы ! можно удалить и оставить только один аргумент, выполняется тестирование длины строки (даже если аргумент является унарным оператором); если ведущие аргументы ! можно удалить и оставить три аргумента, из которых второй является бинарным оператором, то выполняется бинарная операция (даже если первый аргумент является унарным оператором, включая оставленные аргументы !).


Note: Распространенной ошибкой является использование команды if [ $foo = bar ], которая завершается неуспешно в случае, если значение foo является пустым или отсутствует, если имеются вложенные пробелы (т.е. символы IFS) либо если это унарный оператор, например, ! или -n. Вместо этого следует использовать тестирование типа if [ "X$foo" = Xbar ].

Встроенная команда times

times

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

Встроенная команда trap

trap [обработчик сигнал ...]

Установить обработчик trap-файлов, который требуется запускать при получении какого-либо из указанных сигналов.

Аргумент обработчик является либо пустой строкой, указывающей на то, что сигналы игнорируются, либо минусом (-), указывающим на то, что при получении сигналов выполняется действие по умолчанию (см. signal()), либо строкой с командами интерпретатора для анализа и выполнения при первой возможности (т.е. по завершении выполнения текущей команды или перед выводом следующего приглашения PS1) после получения одного из сигналов.

Значение аргумента сигнал соответствует имени сигнала (например, SIGPIPE или SIGALRM) или номеру сигнала (см. описание команды kill -l). Существует два специальных сигнала:

Обработчики EXIT запускаются в среде последней выполненной команды. Обратите внимание на то, что в неинтерактивных командных интерпретаторах обработчик trap-файлов невозможно изменить для сигналов, которые были проигнорированы при запуске интерпретатора.

Без аргументов команда trap выводит, как если была выполнена серия команд trap, список с информацией о текущем состоянии trap-файлов, установленных с момента запуска командного интерпретатора.


Note: Trap-файл DEBUG исходного командного интерпретатора Korn и обработка trap-файлов ERR и EXIT в настоящее время в функциях не реализованы.

Встроенная команда true

true

Команда, завершающая работу со статусом, отличным от нуля.

Эта команда также доступна как исполняемый файл; см. описание команды true.

Встроенная команда typeset

typeset [[+-Ulprtux] [-L[n]] [-R[n]] [-Z[n]] [-i[n]] | -f [-tux]] [имя[=значение] ...]

Показать или установить атрибуты параметров. Без аргументов имя отображаются атрибуты параметров: если опции не используются, то текущие атрибуты всех параметров выводятся как команды typeset; если задана какая-либо опция (или - без буквы опции), выводятся все параметры и их значения с указанными атрибутами; если опции вводятся с символом +, то значения параметров не выводятся.

Если указаны аргументы имя, то атрибуты соответствующих параметров устанавливаются (-) или удаляются (+). Дополнительно можно указать значения параметров. Если в функции используется команда typeset, то все новые параметры являются локальными для функции.

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

Опции:

-L n
Атрибут выравнивания по левому краю: n определяет ширину поля. Если значение n не указано, используется текущая ширина, заданная параметром (или ширина первого присвоенного параметру значения). Ведущий пробельный символ (и нули, если используется опция -Z) удаляется. При необходимости, чтобы уместиться в ширину поля, значения усекаются, либо к ним добавляются пробелы.
-R n
Атрибут выравнивания по правому краю: значение n определяет ширину поля. Если значение n не указано, используется текущая ширина, заданная параметром (или ширина первого присвоенного параметру значения). Конечный пробельный символ удаляется. При необходимости, чтобы уместиться в ширину поля, ведущие символы значения усекаются, либо к ним добавляются пробелы.
-Z n
Атрибут заполнения нулями: если не указана опция -L, аналогичен -R, но вместо пробелов добавляются нули.
-i n
Атрибут целых чисел: значение n определяет используемое для отображения целого числа основание счисления (если указан, то используется основание счисления из первого присвоения). Для присвоения значений параметрам с этим атрибутом можно использовать арифметические выражения.
-U
Атрибут целого числа без знака: целые числа выводятся как значения без знаков (целесообразно только в сочетании с опцией -i). В исходном интерпретаторе Korn эта опция отсутствует.
-f
Режим функции: вместо параметров вывести или установить функции и соответствующие атрибуты.
-l
Атрибут нижнего регистра: все символы в значениях в верхнем регистре заменяются на символы в нижнем регистре. (В исходном командном интерпретаторе Korn этот параметр означал "длинное целое" при использовании с опцией -i)
-p
Вывести полные команды typeset, которые можно использовать для повторного создания атрибутов (но не значений) параметров. Это действие по умолчанию (опция создана для обеспечения совместимости с ksh93).
-r
Атрибут "только для чтения": параметры с этим атрибутом невозможно присвоить или сбросить. После установки этого атрибута снять его невозможно.
-t
Атрибут тега: командным интерпретатором не распознается; предусмотрен для прикладных целей.

Для функций -t является атрибутом трассировки. При выполнении функций с атрибутом трассировки временно активируется опция командного интерпретатора xtrace (-x).
-u
Атрибут верхнего регистра: все символы в значениях в нижнем регистре заменяются на символы в верхнем регистре. (В исходном командном интерпретаторе Korn этот параметр означал "целое число без знака" при использовании с опцией -i. При этом буквы в верхнем регистре не использовались как основания счисления больше 10. См. описание опции -U.)

Для функций -u является неопределенным атрибутом. Пояснения приведены в разделе Функции.
-x
Атрибут экспорта: параметры (или функции) помещаются в среду любых выполненных команд. Функции экспорта не реализованы.

Встроенная команда ulimit

ulimit [-acdfHlmnpsStvw] [значение]

Показать или установить предельные значения процесса. Если опции не используются, устанавливается предельное значение размера файла (-f). Возможными значениями являются арифметическое выражение или слово unlimited. Установленные предельные значения влияют на работу командного интерпретатора и все созданные им процессы. Следует отметить, что в некоторых системах увеличить предельные значения после установки невозможно. Также необходимо учитывать, что возможные типы предельных значений зависят от конкретных систем. В некоторых системах доступно только ограничение -f.

Опции:

-a
Показать все предельные значения; если не указана опция -H, отображаются мягкие предельные значения.
-H
Установить только жесткие предельные значения (по умолчанию устанавливаются как жесткие, так и мягкие предельные значения).
-S
Установить только мягкие предельные значения (по умолчанию устанавливаются как жесткие, так и мягкие предельные значения).
-c
Установить предельный размер дампа памяти n блоков.
-d
Установить предельный размер области данных n килобайт.
-f
Установить предельный размер файлов, записываемых командных интерпретатором и его порожденными процессами, n блоков (для чтения доступны файлы любого размера).
-l
Установить предельный объем заблокированной физической (проводной) памяти n килобайт.
-m
Установить предельный объем используемой физической памяти n килобайт.
-n
Установить предельное число дескрипторов файлов, которые можно открыть одновременно в каждый конкретный момент времени, n.
-p
Установить предельное число одновременно выполняемых пользователем процессов n.
-s
Установить предельный размер области стека n килобайт.
-t
Установить предельный период использования ЦП каждым процессом n секунд.
-v
Установить предельный объем используемой виртуальной памяти n килобайт. В некоторых системах это значение соответствует максимально допустимому виртуальному адресу (не в килобайтах, а в байтах).
-w
Установить предельный объем используемой области подкачки n килобайт. Для ulimit блок соответствует 512 байтам.

Встроенная команда umask

umask [-S] [маска]

Показать или установить маску создания полномочий доступа к файлу или маску umask (см. описание umask). Если используется опция -S, отображается или устанавливается символьная маска, в противном случае маска является восьмеричным числом.

Эта команда также доступна как исполняемый файл; см. описание команды umask.

Символьные маски аналогичны маскам, используемым при выполнении команды chmod:

[ugoa]{{=+-}{rwx}*}+[,...]

в котором первая группа символов описывает кто, вторая группа описывает оператор, а последняя группа – полномочия. Группа кто определяет, какую часть umask требуется изменить. Значения букв:

u
Полномочия пользователя.
g
Полномочия группы.
o
Другие полномочия (не относящиеся к пользователю или группе).
a
Все полномочия (пользователя, группы и прочие).

Группа оператор определяет способ изменения полномочий группы кто:

=
Установить.
+
Добавить.
-
Удалить.

Группа полномочия определяет, какие полномочия требуется установить, добавить или удалить:

r
Полномочия на чтение.
w
Полномочия на запись.
x
Полномочия на выполнение.

Используемые символьные маски описывают возможные полномочия (в противоположность восьмеричным маскам, в которых установленный бит означает, что соответствующий бит должен быть удален). Например, при установке маски ug=rwx,o= файлы будут недоступны для чтения, записи или выполнения "другими" пользователями. Эта маска эквивалентна восьмеричной маске (в большинстве систем) 07.

Встроенная команда unalias

unalias [-adt] [имя ...]

Удалить псевдонимы для соответствующих имен. При использовании опции -a удаляются все псевдонимы. При использовании опции -t или -d указанные операции выполняются для отслеживаемых псевдонимов или псевдонимов каталогов соответственно.

Встроенная команда unset

unset [-fv] параметр ...

Сбросить указанные параметры (по умолчанию, -v) или функции (-f). Статус завершения отличен от нуля, если какой-либо из параметров уже был сброшен. В противном случае устанавливается нулевой статус.

Встроенная команда wait

wait [задание]

Ожидать завершения указанного задания (заданий). Статус завершения команды wait соответствует статусу последнего указанного задания: если последнее задание уничтожено сигналом, то устанавливается статус завершения 128 + номер сигнала (см. описание kill -l статус_завершения); если найти последнее указанное задание не удалось (поскольку оно не существует или уже завершено), устанавливается статус завершения 127. Описание формата аргумента задание приведено в разделе Управление заданиями. Команда wait возвращает результат при получении сигнала, для которого было установлено прерывание, либо при получении сигнала SIGHUP, SIGINT или SIGQUIT.

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

Встроенная команда whence

whence [-pv] [имя ...]

Для каждого имени выводится тип команды (зарезервированное слово, встроенная команда, псевдоним, функция, отслеживаемый псевдоним или исполняемый файл команды). При использовании опции -p поиск по пути выполняется даже в случае, если имя является зарезервированным словом, псевдонимом и т.д. Без опции -v результат выполнения команды whence аналогичен command -v, за исключением того, что whence находит зарезервированные слова и не выводит псевдонимы как команды; с использованием опции -v результат выполнения команды whence аналогичен command -V. Обратите внимание на то, что ввод опции -p для команды whence не влияет на используемый путь поиска, как для команды command. Если определить тип одного или нескольких имен невозможно, то статус завершения будет отличен от нуля.

Управление заданиями

Управление заданиями означает возможность командного интерпретатора осуществлять мониторинг и управление заданиями, которые представляют собой процессы или группы процессов, созданные для команд или конвейеров. Как минимум, интерпретатор отслеживает статус существующих фоновых (т.е. асинхронных) заданий; для просмотра этой информации используется команда jobs. Если активированы все аспекты управления заданиями (с помощью команды set -m или set -o monitor), как для интерактивных интерпретаторов, то процессы задания помещаются в собственную группу процессов с возможностью остановки выполнения приоритетных заданий путем ввода символа приостановки с терминала (как правило, Ctrl - Z) и перезапуска заданий в приоритетном или фоновом режиме с помощью команд fg и bg. При остановке или перезапуске приоритетного задания сохраняется или восстанавливается информация о состоянии терминала.

Следует обратить внимание, что можно остановить только те команды, которые создают процессы (например, асинхронные команды, команды порожденного командного интерпретатора и невстроенные команды, не относящиеся к функциям); остановить команды типа read невозможно.

При создании заданию присваивается номер. Для интерактивных интерпретаторов этот номер выводится в скобках [...], а после него указываются идентификаторы процессов в задании (в случае выполнения асинхронной команды). В команды fg, bg, jobs, kill и wait можно добавлять ссылки на задания с помощью идентификатора последнего процесса в конвейере команд (в соответствии со значением параметра $!) или путем добавления знака процента в виде префикса к номеру задания (%). Для обращения к заданиям также используются другие последовательности с символом процента:

%+
Задание, остановленное последним, или (при отсутствии остановленных заданий) задание, запущенное ранее остальных.
%%, %
Аналогична %.
%-
Задание, которое было бы заданием %+ в случае отсутствия последнего.
%n
Задание с номером n.
%?строка
Задание, содержащее строку (если существует несколько таких заданий, возникает ошибка).
%строка
Задание, начинающееся со строки (если существует несколько таких заданий, возникает ошибка).

При изменении состояния задания (например, при завершении фонового задания или остановке приоритетного) интерпретатор выводит следующую информацию о статусе:

[номер] флаг статус команда

Поля:

номер
Номер задания.
флаг
+ или -, если задание является заданием %+ или %- соответственно, в противном случае – пробел.
статус
Текущее состояние задания:
Running
Задание не было ни остановлено, ни завершено (обратите внимание на то, что "running" ("выполняемое") не обязательно означает потребление времени ЦП – процесс мог быть заблокирован в процессе ожидания определенного события).
Done [(номер)]
Задание завершено. Номер соответствует статусу завершения задания или отсутствует, если установлен нулевой статус.
Stopped [(сигнал)]
Задание было остановлено указанным сигналом (если сигнал не указан, задание было остановлено сигналом SIGTSTP).
описание-сигнала [(core dumped)]
Задание было уничтожено сигналом (например, ошибка памяти, отбой и т.д. – для вызова описания сигналов используется команда kill -l). Сообщение (core dumped) указывает на процесс, которым был создан core-файл.
command
Команда, при выполнении которой создан процесс. При наличии нескольких процессов в задании для каждого процесса выводится строка с информацией о команде и, по возможности, статусе, если он отличается от статуса предыдущего процесса.

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

Интерактивная правка строк ввода emacs

Опция emacs активирует интерактивную правку строк ввода.


Caution: Этот режим несколько отличается от режима emacs в исходном интерпретаторе Korn; в режиме emacs 8-й бит удаляется.

В этом режиме при выполнении различных команд правки (как правило, с привязкой к одному или нескольким управляющим символам) незамедлительно запускаются определенные действия без ожидания новой строки. При вызове интерпретатора создается привязка нескольких команд правки к определенным управляющим символам; для изменения этой привязки используются следующие команды:

bind
Показать текущие привязки.
bind строка=[команда_правки]
Создать привязку указанной команды правки к указанной строке, которая должна состоять из управляющего символа (для ввода которого используется символ вставки ^X) и (необязательно) одного или двух префиксных символов.

После вызова команды bind при вводе строки немедленно выполняется вызов команды правки. Несмотря на то, что поддерживается возможность ввода только двух префиксных символов (обычно ESC и Ctrl - X), также предусмотрена поддержка некоторых последовательностей из большего числа символов. В результате выполнения следующих команд создается привязка кнопок со стрелками на ANSI-терминале или xterm (привязка по умолчанию). Разумеется, не все управляющие последовательности обеспечивают такой эффективный результат: bind '^[['=prefix-2 bind '^XA'=up-history bind '^XB'=down-history bind '^XC'=forward-char bind '^XD'=backward-char
bind -l
Вывести список имен функций, к которым могут быть привязаны клавиши.
bind -m строка=[подстановка]
Впоследствии указанная строка при вводе немедленно заменяется подстановкой, которая может содержать команды правки.

Ниже перечислены команды правки. Каждое описание начинается с имени команды, значения n (если для команды можно использовать префикс счетчика), после которых приведены клавиши, привязанные к команде по умолчанию (записанные с помощью символа вставки, например, символ ASCII ESC записывается как ^[). Префикс счетчика для команды можно ввести с помощью последовательности ^[n, где n представляет собой последовательность из 1 или нескольких цифр; если значение счетчика не указано, по умолчанию используется 1, если не определено иное. Обратите внимание на то, что имена команд правки используются только с командой bind. Кроме того, многие команды правки целесообразно выполнять только на терминалах с режимом видимости курсора. Были выбраны привязки по умолчанию, похожие на соответствующие привязки клавиш emacs. Символы пользователя терминала ввода-вывода (например, ERASE), привязаны к очевидным подстановкам и переопределяют привязки по умолчанию.

abort
Привязка клавиш: ^G

Целесообразно использовать в качестве ответа на запрос для шаблона search-history в целях прерывания поиска.
auto-insert n
Привязка клавиш: отсутствует.

Отображение символа как вводимого литерала. Привязка для большинства обычных символов.
backward-char n
Привязка клавиш: ^B

Перемещает курсор на n символов назад.
backward-word n
Привязка клавиш: ^[B

Перемещает курсор назад к началу слова; слова могут состоять из буквенно-цифровых символов, нижнего подчеркивания (_) и знака доллара ($).
beginning-of-history
Привязка клавиш: ^[<

Перемещает курсор к началу истории.
beginning-of-line
Привязка клавиш: ^A

Перемещает курсор к началу строки ввода в режиме правки.
capitalize-word n
Привязка клавиш: ^[c или ^[C

Переводит в верхний регистр первый символ в следующих n словах с установкой курсора за границей последнего слова.

Если текущая строка начинается не с символа комментария, то этот символ добавляется в начале строки и после этого строка переводится (как при нажатии клавиши ввода). В противном случае существующие символы комментария удаляются, а курсор устанавливается в начале строки.
complete
Привязка клавиш: ^[^[ или ^I

Автоматически дополняет уникальную часть имени команды или имени файла, на которых установлен курсор. Если уникальной является вся остальная часть команды или имени файла, то после завершения имени выводится пробел; к имени каталога добавляется символ /. При отсутствии команды или имени файла, которые начинаются с указанной части слова, выводится символ звукового сигнала (обычно результатом является воспроизведение звукового сигнала).
complete-command
Привязка клавиш: ^X^[

Автоматически дополняет уникальную часть имени команды, которое начинается с части слова, отображаемой до курсора, как при выполнении описанной выше команды complete.
complete-file
Привязка клавиш: ^[^X

Автоматически дополняет уникальную часть имени файла, которое начинается с части слова, отображаемой до курсора, как при выполнении описанной выше команды complete.
complete-list
Привязка клавиш: ^[=

Выводит список возможных вариантов дополнения текущего слова.
delete-char-backward n
Привязка клавиш: ERASE, ^?, ^H

Удаляет n символов перед курсором.
delete-char-forward n
Привязка клавиш: отсутствует.

Удаляет n символов после курсора.
delete-word-backward n
Привязка клавиш: ^[ERASE, ^[^?, ^[^H, ^[h

Удаляет n слов перед курсором.
delete-word-forward n
Привязка клавиш: ^[d

Удаляет символы после курсора и еще n слов целиком.
down-history n
Привязка клавиш: ^N

Выполняет прокрутку буфера истории на n строк вперед (последние данные). Первоначально каждая строка ввода начинается непосредственно после последней записи в буфере истории, поэтому использовать команду down-history целесообразно только после выполнения команд search-history или up-history.
downcase-word n
Привязка клавиш: ^[L, ^[l

Переводит в нижний регистр следующие n слов.
end-of-history
Привязка клавиш: ^[>

Перемещает курсор в конец истории.
end-of-line
Привязка клавиш: ^E

Перемещает курсор в конец строки ввода.
eot
Привязка клавиш: ^_

Действует как признак конца файла; эту команду целесообразно использовать, поскольку при вводе в режиме правки деактивируется обычная канонизация для ввода с терминала.
eot-or-delete n
Привязка клавиш: ^D

Результат аналогичен eot, если введена как единственная в строке; в противном случае действует как delete-char-forward.
error
Привязка клавиш: отсутствует.

Ошибка (звуковой сигнал).
exchange-point-and-mark
Привязка клавиш: ^X^X

Устанавливает курсор в месте положения метки; устанавливает метку в предыдущем месте положения курсора.
expand-file
Привязка клавиш: ^[*

Добавляет символ * к текущему слову и заменяет слово результатом сравнения слова с шаблоном имени файла. Если ни один файл не соответствует шаблону, воспроизводится звуковой сигнал.
forward-char n
Привязка клавиш: ^F

Перемещает курсор на n символов вперед.
forward-word n
Привязка клавиш: ^[f

Перемещает курсор вперед в конец n-го слова.
goto-history n
Привязка клавиш: ^[g

Переходит к номеру истории n.
kill-line
Привязка клавиш: KILL

Удаляет всю строку ввода.
kill-region
Привязка клавиш: ^W

Удаляет введенные данные между курсором и меткой.
kill-to-eol n
Привязка клавиш: ^K

Удаляет введенные данные от курсора до конца строки, если значение n не указано, противном случае удаляет символы между курсором и столбцом n.
list
Привязка клавиш: ^[?

Выводит в столбцах отсортированный список имен команд или файлов (при наличии) с возможностью дополнения части слова, на котором установлен курсор. К именам каталогов добавляется символ /.
list-command
Привязка клавиш: ^X?

Выводит в столбцах отсортированный список имен команд (при наличии) с возможностью дополнения части слова, на котором установлен курсор.
list-file
Привязка клавиш: ^X^Y

Выводит в столбцах отсортированный список имен файлов (при наличии), с возможностью дополнения части слова, на котором установлен курсор. Индикаторы типа файла добавляются, как описано для list выше.
newline
Привязка клавиш: ^J, ^M

Вызывает обработку текущей строки ввода командным интерпретатором. Курсор может быть установлен в любом месте в строке.
newline-and-next
Привязка клавиш: ^O

Вызывает обработку текущей строки ввода командным интерпретатором, при этом текущей становится следующая строка из истории. Целесообразно использовать только после выполнения команды up-history или search-history.
no-op
Привязка клавиш: QUIT

Действия не выполняются.
prefix-1
Привязка клавиш: ^[

Указывает на последовательность команд из двух символов.
prefix-2
Привязка клавиш: ^X, ^[[

Указывает на последовательность команд из двух символов.
prev-hist-word n
Привязка клавиш: ^[., ^[_

В позицию курсора вставляется последнее слово (n-е) предыдущей команды.
quote
Привязка клавиш: ^^

Следующий символ интерпретируется буквально, а не как команда правки.
redraw
Привязка клавиш: ^L

Повторно выводит строку приглашения и текущую строку ввода.
search-character-backward n
Привязка клавиш: ^[^]

Поиск в обратном направлении в текущей строке n-го вхождения следующего введенного символа.
search-character-forward n
Привязка клавиш: ^]

Поиск в прямом направлении в текущей строке n-го вхождения следующего введенного символа.
search-history
Привязка клавиш: ^R

Переход в режим инкрементного поиска. Выполняется поиск команд в обратном направлении по внутреннему списку истории, которые совпадают с введенными данными. Начальный символ ^ в строке поиска создает "закладку" поиска. При нажатии клавиши выхода выполняется выход из режима поиска. Другие команды выполняются после выхода из режима поиска. При последовательном выполнении нескольких команд search-history поиск продолжается в обратном направлении до следующего вхождения шаблона. В буфере истории сохраняется только конечное число строк; наиболее давние игнорируются по мере необходимости.
set-mark-command
Привязка клавиш: ^[клавиша пробела

Установить метку в позиции курсора.
stuff
Привязка клавиш: отсутствует.

В системах с поддержкой такой возможности перемещает привязанный символ назад в поток ввода терминала, где он может быть обработан особым образом обработчиком терминала. Рекомендуется использовать, например, совместно с функцией вывода краткой информации о состоянии системы BRL ^T (mini-systat).
stuff-reset
Привязка клавиш: отсутствует.

Действует как stuff, после чего прерывает ввод аналогично прерыванию.
transpose-chars
Привязка клавиш: ^T

Если указана в конце строки либо если установлена опция gmacs, меняет местами два предыдущих символа; в других случаях меняет местами предыдущий и текущий символы и перемещает курсор на один символ вправо.
up-history n
Привязка клавиш: ^P

Выполняет прокрутку буфера истории на n строк назад (предыдущие данные).
upcase-word n
Привязка клавиш: ^[U, ^[u

Переводит в верхний регистр следующие n слов.
version
Привязка клавиш: ^V

Отображает версию ksh. Текущий буфер правки восстанавливается при нажатии любой клавиши (далее выполняется обработка введенного символа, если это не пробел).
yank
Привязка клавиш: ^Y

Вставляет последнюю удаленную текстовую строку в текущую позицию курсора.
yank-pop
Привязка клавиш: ^[y

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

Файлы:

Классификация:

Базовые подсистемы ЗОСРВ «Нейтрино», UNIX, POSIX

Тематические ссылки:

chmod, esh, fesh, gawk, getconf, sed, sh, stty, uesh, umask

dup(), errno, execve(), getgid(), getopt(), getuid(), open(), pipe(), rand(), signal(), system(), wait()

IEEE Standard for Information Technology — Portable Operating System Interface (POSIX) — Part 2: Shell and Utilities, IEEE Inc, 1993, ISBN 1-55937-255-9.




Предыдущий раздел: Утилиты