Еще нет никакого руководства использования этим тегом …!
Руководство использования, также известное как тег выборка Wiki, является короткой аннотацией, которая описывает, когда и почему тег должен использоваться на этом сайте конкретно.
Оболочка MirBSD Korn или mksh, является Свободным интерпретатором команд (оболочка), предназначенная и для использования интерактивного и для сценария оболочки. 'mksh' является оболочкой по умолчанию на Android, некотором BSDs и некоторых Встроенных дистрибутивах Linux, и это доступно для большинства других операционных систем. Используйте тег “ksh” для универсальных Korn вопросы о Shell и тег “mksh” (дополнительно), если Ваш вопрос предназначается для mksh конкретно.
Оболочка MirBSD Korn, или mksh
, интерпретатор команд (оболочка), предназначенная и для использования интерактивного и для сценария оболочки. Его командный язык является надмножеством оболочки Границы/POSIX (sh
) язык и в основном совместимый с исходной оболочкой Korn (ksh88).
MirBSD Korn Shell стремится быть компактным, последовательным, быстро, не чрезмерно увеличенный в размере, но также и хороший использовать, окружить и для интерактивного и для использования сценария. В то время как некоторые расширенные функции других оболочек (такие как программируемое/настраивавшееся заполнение клавишей Tab) не доступны, и некоторые проектные решения были сделаны сохранить его маленьким, много функций других современных оболочек Unix (GNU bash
, AT&T ksh93
, и zsh
) доступны; mksh стремится обеспечивать те же функции в каждой системе, на которой он работает, если вообще возможный, для помощи людям, пытающимся написать сценарий портативно (но готовый потребовать определенной оболочки).
mksh
OSI, утвержденный Software™ С открытым исходным кодом и активно разработанный преемник pdksh
и оболочка по умолчанию на Android, некоторых вариантах BSD и некоторых (главным образом Встроенный) дистрибутивы Linux. Это также доступно для большинства других операционных систем и дистрибутивов.
mksh активно разрабатывается, как стандарт POSIX; когда что-то в последних изменениях, mksh обычно корректируется для соответствия, независимый, на котором в настоящее время публикуется версия стандарта.
Поскольку mksh разрабатывается как портативная оболочка, в противоположность интегрированному в операционных системах, ее миссия была решена для поведения последовательная через операционные системы (таким образом, сценарии оболочки могут ожидать последовательное поведение во время выполнения), даже игнорируя POSIX при необходимости для достижения этого. Как пример, арифметика – echo $((2147483647 + 1))
– всегда используйте 32-разрядные целые числа и определите, как переполнение обрабатывается.
В местах, где POSIX отличается, существует две “кнопки” для приближения mksh к POSIX. Каждый set -o posix
, то, которое изменяет некоторое поведение во время выполнения оболочки (и, как побочный эффект, выключает расширение фигурной скобки по умолчанию). Другой должен использовать lksh
двоичный файл, который большая часть упаковки распределения mksh должна предложить, вместо mksh
двоичный файл; в lksh
, арифметика сделана совместимая на POSIX, т.е. с C хоста long
тип данных и переполнение, являющееся Неопределенным Поведением.
Для получения дополнительной информации на различиях между mksh
и lksh
, и между выполнением без и с set -o posix
, обратитесь к руководству.
a=u; echo x | read a; echo $a
POSIX позволяет оболочке выполнять обе стороны канала в подпроцессе – делающий этот эквивалент a=u; (echo x) | (read a); echo $a
– или всего один. mksh делает первого.
Если действительно необходимо читать из конвейера в текущую среду выполнения, можно перепроектировать программу, чтобы сделать вещи по-другому или использовать совместно обрабатывание: a=u; echo x |& read a; echo $a
Расширение удара GNU <(command)
еще не поддерживается исходно (хотя это находится в Списке ожидающих выполнения задач). На данный момент этот ответ имеет обходное решение.
Поскольку mksh разрабатывается независимый от любой широко распространенной операционной системы и портативный ко многим странным и/или древним, мы не можем использовать функции локали ОС. mksh реализует C
(POSIX) локаль и локаль “UTF-8”. То, какой активен, в настоящее время, независимо от параметров локали POSIX, но выбранное с set ±U
(set ±o utf8-mode
); это в конечном счете изменится.
Для создания mksh (или lksh) используют режим UTF-8, если текущая локаль POSIX является UTF-8, и C
режим иначе, используйте: set -U; [[ ${LC_ALL:-${LC_CTYPE:-${LANG:-}}} = *[Uu][Tt][Ff]?(-)8* ]] || set +U
Если необходимо интегрировать это в sh
скрипт, запущенный, что код, только если скрипт запускается mksh
или lksh
:
case ${KSH_VERSION:-} in *MIRBSD KSH*|*LEGACY KSH*) case ${LC_ALL:-${LC_CTYPE:-${LANG:-}}} in *[Uu][Tt][Ff]8*|*[Uu][Tt][Ff]-8*) set -U ;; *) set +U ;; esac ;; esac
В ближайшем будущем mksh отследит те переменные среды самом все же.
POSIX изменился для требования целых чисел с продвижением 0
интерпретироваться как восьмеричные цифры; это повреждает левые и правые сценарии. mksh поддерживает также:
$ echo 1: $((010)); set -o posix; echo 2: $((010)) 1: 10 2: 8
Персистентная история отключена по умолчанию по причинам конфиденциальности. Для включения его установить HISTFILE
к пути pdksh-стиля (двоичный файл) файл истории. Не используйте стиль удара (ASCII) файл истории, поскольку он был бы перезаписан и поврежден. Можно также хотеть установить HISTSIZE
, но не к безумно высоким значениям, поскольку память предварительно выделяется. Можно поместить это в ~/.mkshrc
:
export HISTFILE=~/.pdksh_history HISTSIZE=65536
Персистентный файл истории совместно использован между параллельными сессиями оболочки; синхронизация происходит при нажатии Enter после команды.
Некоторые mksh
двоичные файлы не компилируются с поддержкой персистентной истории, например, Android (из-за определенной для телефона среды) или для операционных систем без mmap
. Это просто не создаст файл затем.
Подобный ksh93, функциям, определяемым с function
ключевое слово, в противоположность name()
синтаксис, имейте их собственные флаги оболочки (в последних версиях); это означает, что Вы можете, например, переключать режим UTF-8 в функции, и это восстанавливается после отъезда его.
В отличие от ksh93, однако, local
работа переменных в обоих видах функций и mksh (как все другие оболочки nōn-AT&T-ksh) используют вложенную модель обзора (значение, что локальные переменные вызывающей стороны доступны вызываемому). nameref
s реализованы немного по-другому: они решают к цели каждый раз, когда они вызываются/используются, не во время определения, таким образом, они могут обратиться к собственным локальным переменным функции если не осторожный.
DEBUG
прерывание и обработка ERR
и EXIT
прерывания в функциях (от ksh88) еще не реализованы; обработка с плавающей точкой не будет реализована. Несколько после 1993 ksh93 расширения еще не реализованы, некоторые в конечном счете будут.
… находятся в реализованном будущим образом списке. mksh/assockit.ksh
в “shellsnippets” репозитории содержит в настоящее время применимое (если иногда немного замедляются), обходное решение посредством функций оболочки; mksh/assoldap.ksh
хороший пример использования (привязка LDAP для оболочки).
/bin/sh
…… в некоторых операционных системах (например, MidnightBSD, Debian), режим эмуляции вызывается. Это включает включение set -o posix
(лучшая совместимость POSIX), set -o sh
(причуды сценария прежней версии), или оба. Это может изменить поведение.
Канал IRC #!/bin/mksh
в сети IRC Freenode - то, где можно задать вопросы, сообщить об ошибках, и т.д. – вокруг обычно существует некоторый волонтер/пользователь, и разработчики читают отставание большую часть времени. Можно также спросить в #ksh
(Infopage), если Вы указываете на использование mksh. Существует также список рассылки (см. нижнюю часть страницы справочника), который можно считать онлайн, например, через GMane.
Так как многие люди изучают программирование путем рассмотрения кода других, Инструментарий Shell (shellsnippets) проект стремится собирать некоторых. Больше ресурсов найдено в #ksh
infopage.