Каковы принципиальные различия между основными оболочками * NIX и какими сценариями может быть предложено использовать один поверх другого? Я понимаю, что некоторые из них, вероятно, сводятся к пользовательским предпочтениям, но я когда-либо использовал только bash, и мне интересно узнать, где может быть полезна другая оболочка.
Кроме того, влияет ли это на написанные пользователем сценарии оболочки при запуске под одной или другой оболочкой, или это просто вопрос изменения оболочки вверху файла? Мой инстинкт говорит, что это не так просто.
jsh
(который не является Java-оболочкой!), В котором отсутствует подстановка переменных, как${VAR#foo}
и${VAR%bar}
.tcsh
является довольно популярным среди пользователей UNIX , которые изучили свои трюки до ~ середины 90-х годов (которые видели введение какbash
иzsh
), особенно среди старых UNIX +C
разработчиков, которые начали жизнь сcsh
(Напомним, что в с вcsh
стендами дляC
языка , который был вдохновением для его отличий от раковин в стиле Борна). См. Также программирование на Csh , которое считается вредным , и которое я часто использую для советов по глубокой магии POSIX (в дополнение к аргументам анти-csh).Существует два основных вида shell: sh (например, bash) и csh (например, tcsh). Для интерактивного использования это в основном сводится к тому, к чему вы привыкли. Я использовал csh, а затем tcsh годами, и переключаться было бы больно, просто потому, что я к этому привык. Я также использовал bash и не думаю, что есть веские причины для перехода. За исключением, может быть, если один или другой недоступен на машинах, которые вы регулярно используете.
Для программирования синтаксис другой. Вы не можете просто изменить оболочку, но также необходимо изменить синтаксис сценария. Для сценариев вы хотите использовать sh или bash. Синтаксис гораздо более поддается сценариям, как объяснено здесь (спасибо Риккардо Мурри за ссылку. Это хорошее руководство по сценариям bash.
Если вы еще не выбрали оболочку и планируете написать несколько сценариев, я бы использовал bash только для того, чтобы уменьшить количество вещей, которые вам необходимо изучить.
источник
В старые времена, когда AT & T изобрел UNIX, существовал Bourne Shell, написанный Стивом Борном. Это было довольно просто, и не хватало многих инструментов, которые мы считаем само собой разумеющимся в наши дни.
AT & T на самом деле не был в бизнесе UNIX, поэтому в настоящее время Berkelely в некотором роде принял базовую ОС, и они внесли некоторые изменения в BSD UNIX. Среди многих изменений была новая оболочка под названием csh, в которой было много улучшений по сравнению с sh, в том числе контроль работы, улучшенное интерактивное использование и так далее. К сожалению, они решили, что синтаксис программирования sh не работает, и создали свои собственные (несколько плохие), скопированные из стилей программирования C. (Классическая напыщенная речь http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/ ) Так что теперь было два синтаксиса.
Позже они внесли улучшения в CSH, добавив завершение табуляции и некоторые другие вещи. Это стало tcsh, и если вы используете CSH, это, вероятно, тот, который вы используете.
AT & T решили, что это не совсем не связано с бизнесом UNIX, и они тоже оттачивали его. Дэвид Корн (хороший парень) создал оболочку Корн. Основанная на идее расширения синтаксиса оболочки Bourne, она добавила много вещей как для программистов, так и для интерактивного использования. На самом деле существует несколько версий, и вы можете редко видеть такие вещи, как ksh88 и ksh93, обозначающие варианты.
Затем пришли ФСФ и ОС GNU. Они хотели создать свою собственную UNIX-совместимую ОС под названием Hurd и хотели лучшую оболочку для нее. Они назвали Bash для Bourne Again Sheell. Правила POSIX пришли как раз в это время, и они хотели бы сделать в POSIX оболочку. Они оглянулись, взяв синтаксис оболочки Bourne и улучшения оболочки Korn, а также украли и расширили интерактивные функции из tcsh. Он стал де-факто оболочкой для Linux, поэтому он очень распространен.
Также есть zsh, написанный как «окончательная» оболочка. Это также очень распространено в мире Linux. Это расширило bash (и немного опылило кросс, некоторые новые вещи вернулись к bash).
Если бы я выбрал раковину, я бы выбрал bash или zsh. Bash, возможно, в нескольких местах, чем Zsh. zsh более мощный, но bash для меня хорош. Real / bin / sh Bourne shell существует только по историческим причинам. В bash есть все, что может предложить ksh, и даже больше. Синтаксис чище, чем csh или tcsh, и обладает лучшими возможностями, чем любой из них.
Конвертировать скрипт зависит от того, к чему. Стиль оболочки Bourne (sh, ksh, bash, zsh) в или из стиля csh (csh, tcsh) будет сложным. Переход от старого к новому (/ bin / sh => bash, / bin / ksh => zsh) будет проще, чем другим способом.
источник
Две основные ветви оболочек - это производные оболочки Борна (sh, bash, ksh, ash, yash и zsh) и производные csh (tcsh и ... uhm ... tcsh).
Я подозреваю (хотя у меня нет фактических чисел), что bash является наиболее широко используемым, по-видимому, это оболочка по умолчанию в большинстве linux.
Большинство вещей, написанных в одной производной оболочки Bourne, вероятно, будут работать в других. Большинство вещей, написанных в оболочке Bourne, вероятно, нужно будет модифицировать для запуска под csh или tcsh.
Лично я использовал ksh, когда начинал, потому что это то, что было в системе, которую я использовал. Сейчас я в основном использую bash.
источник
Я использовал множество снарядов с течением времени. Не что-то супер продвинутое, но много практических сисадминов и программных вещей, которые требуют достаточной настройки.
Я думаю, что у zsh есть больше опций настройки, по крайней мере, раньше, но после его использования в течение нескольких лет мне хватило его проблем со стабильностью и кодированием символов. Bash надежен, у него никогда не было подобных проблем, и он везде установлен.
источник