Мне любопытно, почему можно использовать bash вместо zsh. Я имею в виду, что zsh полностью обратно совместим с bash. Не поймите меня неправильно: мне не нравится Баш или что-то еще. Я просто искренне хочу знать, есть ли какие-либо преимущества использования его по сравнению с Zsh.
Так какая причина использовать bash вместо zsh?
Ответы:
На ум приходят две причины:
Первое - это доступно практически везде. У меня есть несколько систем Linux (в данном случае CentOS 4.x), на которых не установлена zsh. Точно так же я должен коснуться древних систем, таких как Solaris 2.6 и выше, HP-UX 10 и выше, и аналогично скрипучих версий AIX. Поэтому мне в значительной степени приходится использовать bash на этих компьютерах, что я и делаю, потому что в течение месяца я касаюсь десятков, если не сотен, отдельных компьютеров, и чтобы добиться согласованности в вашем интерфейсе, вы в конечном итоге застряли, используя по умолчанию.
Второе - это доступно практически везде. Это означает, что я могу написать скрипт оболочки bash и быть на 99% уверенным, что он будет работать при переносе в другое место.
Да, эти причины внешне одинаковы, но причины их различны.
источник
Bash обычно поставляется с каждой системой, а Zsh - нет. Я люблю zsh, но из-за этого я использую zsh для интерактивного использования, но Bash для всех моих сценариев .
Я нахожу, что это делает все проще, потому что даже когда я покупал все, что совместимо с bash (setopt SH_WORD_SPLIT?), Я все еще сталкиваюсь с небольшими различиями.
источник
Zsh не полностью совместим с Bash. Есть множество отличий. Более новый zsh более совместим с bash (= ~ поддерживается, exec теперь имеет дополнительные опции флагов и т. Д.), Но полная совместимость не является целью, даже в разделе «emulate».
Например, подстрока bash - это $ {foo: offset: len}, но в zsh это $ foo [start, end], и это всего лишь один простой пример.
zsh - это оболочка, на которую влияют tcsh и ksh, которая делает многие вещи по-своему; Совместимость с POSIX явно не является целью, но разработчики реагируют на патчи, которые добавляют параметры / эмулируют поведение, приближающее POSIX. Но когда вы действительно начинаете понимать мощь оболочки, вы начинаете создавать сценарии только для записи, даже больше, чем bash.
bash - это POSIX sh + ksh + pedanticism, некоторые функции теперь скопированы из zsh. Он также имеет сценарии только для записи, но поскольку он имеет менее мощные операторы, вы в конечном итоге не используете краткость zsh, и все может быть более читабельным (за исключением всех кавычек, чтобы избежать разделения пробелов, глупый массив $ ksh-style означает сначала -элемент-массив, не все-элементы-массив и т. д. и т. д.).
Написание сценариев, которые в полной мере используют возможности любой оболочки, нецелесообразно, если только вы не находитесь в стесненной среде (например, написание системных rc-сценариев, где некоторые FS могут быть не смонтированы и т. Д.). В идеале, используйте Perl / Python / Ruby / что угодно для чего-то достаточно большого, чтобы вам нужна выразительность не в Bourne sh, если вы хотите, чтобы другие могли ее поддерживать. Сохраняйте содержимое оболочки для вещей, относящихся к интерактивной оболочке (программирование завершения вкладок и т. Д.).
Я бы не использовал Bash над Zsh. Я бы использовал голый sh над zsh для простых сценариев или переключился бы на язык, где ассоциативные массивы имеют достойные операторы (в отличие от zsh, где они, опять же, «кратки»). Я мог бы переключить сценарий sh на bash, если мне нужна эта небольшая функция для расширения существующего проверенного сценария, и у меня нет времени переписывать его сейчас.
источник
Мой совет: если вы стремитесь к абсолютной переносимости, пишите с использованием правил оболочки Bourne, даже не думайте о расширениях оболочки Korn. Как уже упоминалось, это старые «большие коробки», на которых вообще нет оболочек GNU.
Баш уже делает "слишком много". У меня есть друг на работе, который предпочитает Zsh, но я не знаю, что именно он делает.
В любом случае, либо пишите для оболочки Bourne (или «Bourne again»), либо поочередно, если вы делаете собственный сценарий для небольшого числа конкретных блоков, полностью пропустите «shell hell» и просто пишите, используя perl или python (или любой другой ваш любимый локально установленный переводчик есть).
источник
В дополнение к приведенной выше причине переносимости, другая причина может заключаться в том, что bash все еще добавляет функции.
Например, bash v4.x + представил:
рекурсивное сглаживание:
autocd:
источник
Ерунда. Если вы знаете, что в каждой вашей системе есть BASH, это вполне разумное утверждение. BASH имеет много полезных функций, которые нельзя разумно эмулировать в POSIX sh. Легкомысленное использование функций, отличных от POSIX, не является хорошей идеей, но использовать их, когда они вам действительно нужны, вполне нормально.
Переносимость не является абсолютной. Можно утверждать, как далеко вы должны взять это, как и все остальное. Например, Fedora использует команды оболочки для сборки пакетов RPM, а в рекомендациях по пакетированию Fedora говорится, что, поскольку все пакеты должны быть собраны непосредственно в Fedora, можно использовать все функции BASH. Хотя теоретически другие дистрибутивы без BASH, возможно, захотят повторно использовать свои исходные RPM-пакеты, они приняли решение о переносимости на основе практичности, а не вашей «ВСЕГДА UZE POSIX !! 1» мантры.
ZSH не завоевал популярность как оболочка по умолчанию, просто потому, что это беспорядочный полушарий идей.
источник
Кстати, вам много раз говорили здесь, что
bash
встречается практически везде, поэтому используйте его для написания переносимых скриптов, что неверно .Правильный способ написания переносимых сценариев Unix - это использование
sh
, которое встречается в каждой системе * nix .Любая другая оболочка, кроме вас,
sh
является просто вашим ежедневным интерактивным инструментом.Когда вы переходите на
bash
vszsh
-bash
входит в комплект более*nixes
чемzsh
, поэтому возникают недостатки установки дополнительного программного обеспечения в систему - вы должны поддерживать его. Некоторые люди любят Zsh "крутые функции", поэтому они любят платить эту цену, а некоторые нет.источник
sh
это bash, он активирует режим совместимости при запуске какsh
.Еще один момент:
Многие программы обеспечивают классное завершение bash по умолчанию. Для меня это причина не переключаться.
[добавлено в июле 2013 года] После нескольких лет использования zsh после комментария выше, я должен сказать, что завершение табуляции (даже встроенное, без модификаций 3-й части) блестяще и выглядит так, как будто оно намного превышает предложенное bash. , :).
источник