Я заметил, что практически ни одна из систем, с которыми я когда-либо работал, не имеет /bin/sh
настоящего исполняемого файла. Это всегда символическая ссылка dash
, bash
в режиме POSIX или что-то подобное.
Почему? Каковы недостатки использования истинного, оригинального /bin/sh
? (Скорость? Лицензирование?)
sh
слинкованы вksh
?ksh
.bash
, IIRC.sh
основан на стандарте, который означает, что у нас может быть несколько реализаций, которые будут вести себя четко определенным образом, пока вы используете стандартный синтаксис в своем скрипте.Ответы:
Я предполагаю отсутствие функций - нет истории команд, нет необычного перенаправления, нет редактирования командной строки. По
csh
этим причинам BSD представила оболочку C Еще одним фактором является то, что Подлинная оболочка Bourne была доступна только недавно в форме с открытым исходным кодом . Если вы не лицензировали его, вы не могли бы распространять его. Это сделало его недоступным для бесплатных дистрибутивов и сделало его идеологически неприятным для других дистрибутивов и * BSD.Но код доступен сейчас. Вы можете посмотреть, скомпилировать его, дать ему вращение.
источник
sh
- это то же самое, что и использование,bash
за исключением того, что оно медленнее, программы длиннее и сложнее в обслуживании.sh
команду запускать POSIX-совместимую оболочку, а не унаследованная оболочка Bourne. В то время как POSIX не требует ,sh
чтобы быть в/bin/sh
, это самый логичный каталог для того , чтобы быть.sh
не имеет расширения тильды и распорка, некоторые встроенные модули не хватает (например ,pushd
иpopd
,select
) не арифметическое расширение. Многие переменные отсутствуют, напримерPIPESTATUS
.Утверждение в вашем вопросе неверно. Solaris до версии 10 является обеспечение наследия истинного Bourne оболочки как
/bin/sh
. Это сделано для того, чтобы не нарушить совместимость со старыми скриптами, которые могут не работать с другой оболочкой. Этот выбор был очень разочаровывающим, хотя.Большинство, если не все, оставшиеся Unix и Unix-подобные версии, включая Solaris 11, предоставляют POSIX-совместимую оболочку,
/bin/sh
поскольку POSIX предписываетsh
команде запустить оболочку POSIX, а не устаревшую оболочку Bourne, которая не совместима./bin/sh
как правило:ksh88
илиksh93
на коммерческих реализациях Unixbash
наOS/X
(хотя это былоzsh
)ash
илиpdksh
производные от другаBSDs
bash
илиdash
в дистрибутивах Gnu / Linux.Это не обязательно ссылка, но она может быть реальным исполняемым файлом во многих системах, кроме Gnu / Linux.
Интересно отметить, что, несмотря на то, что в ответе на ваш вопрос говорится о наиболее одобренном ответе, не отсутствие функций побуждает разработчиков дистрибутивов устанавливать нечто иное, чем унаследованная оболочка Bourne,
/bin/sh
а желание быть как можно более совместимым с POSIX, то есть вести себя как Юникс как ОС. Тот факт, что оболочка POSIX имеет больше возможностей, чем унаследованная оболочка Bourne, является лишь побочным эффектом этой стандартной цели обеспечения соответствия.Это также факт, что некоторые оболочки, в частности
bash
, ведут себя по-разному при вызовеsh
, и это в основном удаляет функции из оболочки, а не наоборот.источник
Насколько я знаю, оригинальная оболочка Bourne не могла использоваться BSD и проектом GNU из-за ее лицензии.
В то время у оригинального Unix не было лицензии, а проекту GNU требовалась оболочка, которая была под GPL, поэтому они использовали bash.
То же самое верно для BSD4, родителя всех BSD. Благодаря иску AT & T им пришлось переписать весь исходный код из оригинального Unix, включая оболочку Bourne.
Из FreeBSD
man sh
Таким образом, оба проекта были вынуждены не использовать оболочку Bourne и соглашаться на настоящую оболочку с открытым исходным кодом.
источник
Были и другие проблемы. Оболочка Bourne действительно использовала sbrk () вместо malloc (), и это делало ее не очень переносимой.
После того, как оболочка Bourne стала OpenSource через OpenSolaris, я создал переносную версию hafway, а затем действительно переносимую версию, заменив sbrk () на malloc () с помощью Джеффа Коллиера (того же человека, который помог избежать sbrk () в Корн Шелл).
Первоначальная причина, по которой я сделал переносную версию Bourne Shell, заключается в том, что мне нравилось делать редактор истории, который я написал для моего «bsh» между 1982 и 1984 годами, также доступным в Bourne Shell. Тем временем я перенес большую часть уникальных характеристик, которые я написал для «bsh», в Bourne Shell.
Это среди прочего:
Справочная онлайн-страница находится по адресу: http://schillix.sourceforge.net/man/man1/bosh.1.html . Источники являются частью набора инструментов schily:
https://sourceforge.net/projects/schilytools/files/
Я рекомендую использовать: http://sourceforge.net/projects/schilytools/files/schily-2015-08-18.tar.bz2 или более новую версию.
PS меня интересует обратная связь
источник
Он связан с оболочками, которые обеспечивают 100% обратную совместимость . Вы не потеряете ничего, что имеет оригинальная оболочка, но получите больше возможностей поверх нее. Там нет недостатков, так почему бы пропустить новые функции? Это та же самая причина, почему
/bin/vi
обычно она связана с vim .источник
bash
, намного, намного медленнее, чемdash
IFS=,; rm file1,file2,file3
удалил бы эти 3 файла в оболочке Bourne. Эта (глупая) особенность была удалена в POSIX sh. Существуют десятки тонких различий, которые могут привести к тому, что скрипт, написанный для оболочки Bourne, будет работать по-разному с POSIX sh.