4
ответа

Где zsh и mksh являются несовместимыми с ударом?

До какой степени другие совместимые с POSIX оболочки могут функционировать как разумные замены для удара? Они не должны быть истинными "общедоступными" заменами, но достаточно близко работать с большинством сценариев и поддержки...
02.10.2014
3
ответа

Какие оболочки поддерживают «подстановку значений», например MirBSD Korn Shell?

В Android (, использующем mksh, MirBSD Korn Shell ), существует специальный синтаксис подстановки строк (, называемый «подстановкой значений» ):. ${|commands} Вместо сбора вывода команд (как...
24.09.2020
3
ответа

Как включить историю команд ksh между сеансами

Если я запускаю ksh или mksh, моя стрелка вверх ничего не делает : $кш $ ^[[A^[[A^[[A^[[A^[[A Но это работает с bash, если я запускаю bash и нажимаю стрелку вверх. $ удар developer@1604:~$ ssh (скрыто) -...
21.09.2018
1
ответ

Когда порядок перенаправления имеет значение?

Я написал скрипт, который имеет несколько выходов из системы с помощью printf "..." 1>&2 внутри функции. Запустив этот скрипт (build.sh ), я заметил, что если я хочу перенаправить stderr на stdout и...
20.06.2021
1
ответ

Можно ли заставить mksh использовать тильду (~) для дома на PS1?

например, вместо отображения user@hostname:/home/user в подсказке, как в примере на странице руководства, можно ли заставить mksh отображать user@hostname:~ ?
05.03.2020
1
ответ

Действительно ли возможно получить рабочую историю для многострочных команд в mksh, с помощью vi режим редактирования?

В моих системах Debian я всегда использовал pdksh в качестве своей интерактивной оболочки. Первоначально, поведение истории командной строки было подобно тому, с чем я рос на платформах как AIX и Солярис. Недавно...
01.05.2015
0
ответов

Есть ли способ локализовать переменные для текущей функции в `mksh`, но не для других?

Есть ли способ установить $ val в () но не быть увиденным b ()? set -u -e -o pipefail a () {local + x val = "myval" echo "в a: VAL = $ val" b } b () {echo "in b: VAL = $ val" } a Производит: ...
06.07.2016
0
ответов

mksh complete при перемещении в родительский каталог

Я только что установил mksh и не знаю, как решить одну проблему с литте, которая у меня есть. При попытке изменить каталог на родительский каталог mksh не завершается при нажатии кнопки "tab". Позвольте мне визуализировать: $ ...
18.11.2015

Еще нет никакого руководства использования этим тегом …!

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

Еще нет никакого тега Wiki для этого тега …!

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

Все зарегистрированные пользователи могут предложить новый тег wikis.

(Обратите внимание, что, если у Вас есть меньше чем 20 000 репутаций, Ваш тег, Wiki будет одноранговым узлом, рассмотренным, прежде чем это будет опубликовано.)

---------121 оболочка--------1415----MirBSD Korn или mksh, является Свободным интерпретатором команд (оболочка), предназначенная и для использования интерактивного и для сценария оболочки. 'mksh' является оболочкой по умолчанию на Android, некотором BSDs и некоторых Встроенных дистрибутивах Linux, и это доступно для большинства других операционных систем. Используйте тег “ksh” для универсальных Korn вопросы о Shell и тег “mksh” (дополнительно), если Ваш вопрос предназначается для mksh конкретно.

Оболочка MirBSD Korn или mksh, является Свободным интерпретатором команд (оболочка), предназначенная и для использования интерактивного и для сценария оболочки. 'mksh' является оболочкой по умолчанию на Android, некотором BSDs и некоторых Встроенных дистрибутивах Linux, и это доступно для большинства других операционных систем. Используйте тег “ksh” для универсальных Korn вопросы о Shell и тег “mksh” (дополнительно), если Ваш вопрос предназначается для 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. Это также доступно для большинства других операционных систем и дистрибутивов.

Внешние ссылки

Часто задаваемые вопросы

POSIX

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) еще не поддерживается исходно (хотя это находится в Списке ожидающих выполнения задач). На данный момент этот ответ имеет обходное решение.

Локали (POSIX)

Поскольку 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)

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. Это просто не создаст файл затем.

AT&T Korn примечания совместимости Shell

Подобный ksh93, функциям, определяемым с function ключевое слово, в противоположность name() синтаксис, имейте их собственные флаги оболочки (в последних версиях); это означает, что Вы можете, например, переключать режим UTF-8 в функции, и это восстанавливается после отъезда его.

В отличие от ksh93, однако, local работа переменных в обоих видах функций и mksh (как все другие оболочки nōn-AT&T-ksh) используют вложенную модель обзора (значение, что локальные переменные вызывающей стороны доступны вызываемому). namerefs реализованы немного по-другому: они решают к цели каждый раз, когда они вызываются/используются, не во время определения, таким образом, они могут обратиться к собственным локальным переменным функции если не осторожный.

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.