Мне любопытно, зачем запускать bash вместо zsh. Я имею в виду, что zsh полностью обратно совместим с bash. Не поймите меня неправильно: мне не нравится bash или что-то в этом роде. Я просто искренне хочу знать, есть ли какие-либо преимущества в его использовании по сравнению с zsh.
Так зачем использовать bash вместо zsh?
Две причины приходят на ум:
Сначала - это доступно практически везде. У меня есть несколько систем Linux (CentOS 4.x в этом случае), которые не имеют zsh установленным. Так же я должен коснуться древних систем как Солярис 2.6 и, HP-UX 10 и, и столь же скрипучие версии AIX. Поэтому я в значительной степени должен использовать удар на этих компьютерах, которые я делаю, потому что я касаюсь десятков, если не сотни, индивидуальных компьютеров в течение месяца, и для получения непротиворечивости в интерфейсе, Вы заканчиваете тем, что застряли с помощью значений по умолчанию.
Второй - это доступно практически везде. Это означает, что я могу записать сценарий оболочки удара и быть на 99% уверен, что он будет работать при передаче в другое место.
Да, этими причинами является поверхностно то же, но обоснование позади них отличается.
Bash обычно идет с каждой системой, zsh не делает. Я люблю zsh, но из-за этого, я использую zsh для интерактивного использования, но Bash для всех моих сценариев.
Я нахожу, что это сохраняет все более простым, как даже когда я shopt вообще удар совместимый (setopt SH_WORD_SPLIT?), я все еще сталкиваюсь с тонкими различиями.
Мой совет: если Вы идете для абсолютной мобильности, запишите правила Оболочки Bourne использования, даже не беспокойтесь расширениями оболочки Korn. Как упомянуто, это - некоторые более старые "большие поля" вокруг этого, не имеют оболочек GNU на них вообще.
Bash уже делает "слишком много". У меня есть друг на работе, который предпочитает zsh, но я не знаю то, что точно это делает.
Так или иначе или запишите для Bourne (или "границы снова") оболочку, или поочередно при выполнении пользовательского сценария для небольшого количества определенных полей пропустите "ад оболочки" полностью и просто запишите жемчуг использования или Python (или независимо от того, что фаворит локально установил интерпретатор).
Другая точка:
Много программ обеспечивают прохладное завершение удара по умолчанию. Для меня это - причина не переключиться.
[добавленный в июле 2013] Много позже нескольких лет использования zsh начиная с комментария выше, я должен сказать, что заполнение клавишей Tab (даже встроенное, w/никакие 3-и parety модификации) является блестящим и является похожим, это далеко вне того, предлагаемого ударом.:).
zsh не является полностью совместимым ударом. Существует множество различий. Более новый zsh более совместим с ударом (= ~ поддерживаемый, у должностного лица теперь есть дополнительные опции флага, и т.д.), но полная совместимость не является целью, даже под не "эмулируют".
Например, подстрока удара является $ {foo:offset:len}, но в zsh это - $foo [запускаются, конец], и это - всего один простой пример.
zsh является tcsh и ksh оболочка, на которую влияют, которая делает много вещей ее собственный путь; совместимость POSIX явно не, цель, но разработчики является быстро реагирующей к патчам, которые добавляют поведение опций/эмулировать, которые получают вещи ближе к POSIX. Но когда Вы начинаете действительно входить в питание оболочки, Вы начинаете создавать сценарии только для записи, более ровные, чем удар.
ударом является POSIX sh + ksh + pedanticism с некоторыми функциями, теперь скопированными с zsh. Это также имеет сценарии только для записи, но потому что это имеет менее мощные операторы, Вы заканчиваете тем, что не использовали краткость zsh, и вещи могли бы быть более читаемыми (за исключением всего заключения в кавычки для предотвращения пробельного разделения, глупый $array ksh-стиля означает first-element-of-array, не all-elements-of-array, и т.д. и т.д.).
Запись сценариев, которые в полной мере пользуются питанием любой оболочки, неблагоразумна, если Вы не находитесь в ограниченной среде (например, сценарии дистанционного управления системы письменности, где некоторый FSS не мог бы быть смонтирован, и т.д.). Как идеал, используйте Perl/Python/Ruby/whatever для чего-либо достаточно большого, что Вам нужна выразительность не в Bourne sh, если Вы хотите, чтобы другие смогли поддержать его. Сохраните материал оболочки для вещей, касающихся интерактивной оболочки (программирование заполнения клавишей Tab, и т.д.).
Я не использовал бы удар по zsh. Я использовал бы пустой sh по zsh для простых сценариев или переключился бы на язык, где ассоциативные массивы имеют достойные операторы (в отличие от этого, в zsh, где они, снова, 'кратки'). Я мог бы переключить sh сценарий, чтобы колотить, если я нуждаюсь в том мало функции для расширения существующего доказанный работавшего сценария и не имею времени для перезаписи его теперь.
Кстати, здесь вам много раз говорили, что bash
встречается практически везде, поэтому используйте его для написания переносимых скриптов, что неверно ].
Правильный способ написания переносимых сценариев unix - использовать sh
, который встречается в каждой системе * nix .
Все остальные оболочки, кроме sh
- это просто ваш ежедневный интерактивный инструмент.
При переходе к bash
vs zsh
- bash
входит в дополнительные * nixes
, чем zsh
, поэтому здесь возникают недостатки установки дополнительного программного обеспечения в систему - вы должны поддерживать его. Некоторым людям нравятся "крутые функции" zsh, поэтому им нравится платить такую цену, некоторым нет.
В дополнение к указанной выше причине переносимости, еще одна причина может заключаться в том, что bash все еще добавляет функции.
Например, bash v4.x + представил:
рекурсивная подстановка:
rm -f ** / *. log
autocd:
Введите «/ tmp» вместо «cd / tmp»
Кстати, здесь вам много раз говорили, что bash находится практически везде, поэтому используйте его для написания переносимых скриптов, ложь.
Ерунда. Если вы знаете, что каждая система, которая вам интересна, имеет BASH, это вполне разумное утверждение. BASH имеет множество полезных функций, которые невозможно эмулировать в POSIX sh. Легкомысленное использование функций, не относящихся к POSIX, - не лучшая идея, но использовать их, когда они вам действительно нужны, - это нормально.
Переносимость не абсолютна. Это спорно, насколько далеко вы должны принять его, так же как и все остальное. Например, Fedora использует команды оболочки для создания пакетов RPM, а в рекомендациях по упаковке Fedora указано, что, поскольку все пакеты должны быть изначально созданы на Fedora, можно использовать все функции BASH. Хотя теоретически другие дистрибутивы без BASH могут захотеть повторно использовать свои исходные RPM, они приняли решение о переносимости, основываясь на практичности, а не на вашей мантре «ВСЕГДА ИСПОЛЬЗУЙТЕ POSIX !! 1».