Есть ли причина использовать bash вместо zsh? [закрыто]

Мне любопытно, зачем запускать bash вместо zsh. Я имею в виду, что zsh полностью обратно совместим с bash. Не поймите меня неправильно: мне не нравится bash или что-то в этом роде. Я просто искренне хочу знать, есть ли какие-либо преимущества в его использовании по сравнению с zsh.

Так зачем использовать bash вместо zsh?

33
задан 1 March 2015 в 02:43
8 ответов

Две причины приходят на ум:

Сначала - это доступно практически везде. У меня есть несколько систем Linux (CentOS 4.x в этом случае), которые не имеют zsh установленным. Так же я должен коснуться древних систем как Солярис 2.6 и, HP-UX 10 и, и столь же скрипучие версии AIX. Поэтому я в значительной степени должен использовать удар на этих компьютерах, которые я делаю, потому что я касаюсь десятков, если не сотни, индивидуальных компьютеров в течение месяца, и для получения непротиворечивости в интерфейсе, Вы заканчиваете тем, что застряли с помощью значений по умолчанию.

Второй - это доступно практически везде. Это означает, что я могу записать сценарий оболочки удара и быть на 99% уверен, что он будет работать при передаче в другое место.

Да, этими причинами является поверхностно то же, но обоснование позади них отличается.

29
ответ дан 28 November 2019 в 19:53

Bash обычно идет с каждой системой, zsh не делает. Я люблю zsh, но из-за этого, я использую zsh для интерактивного использования, но Bash для всех моих сценариев.

Я нахожу, что это сохраняет все более простым, как даже когда я shopt вообще удар совместимый (setopt SH_WORD_SPLIT?), я все еще сталкиваюсь с тонкими различиями.

24
ответ дан 28 November 2019 в 19:53
  • 1
    Это было бы каждой системой GNU/Linux, которую Вы имеете в виду? –  andol 11 December 2009 в 16:19
  • 2
    Хорошо я нашел, что это идет с OS/X и bsd, я don' t имеют много опыта с другим *nix' s, сделайте у них (последние версии) не обычно есть удар? –  Kyle Brandt 11 December 2009 в 16:27
  • 3
    Более старые версии Соляриса didn' t включают удар; я обычно должен был зависеть от Bourne, являющегося оболочкой для сценариев. Этот hasn' t имевший место некоторое время, но можно все еще столкнуться с ним на некоторых крупных предприятиях. –  user5336 11 December 2009 в 16:41
  • 4
    Должен другой BSD:s затем. По крайней мере, в OpenBSD и в FreeBSD необходимо установить удар отдельно от портов/пакетов. –  andol 11 December 2009 в 17:01
  • 5
    andol: Это - те, я раньше использовал.. Я должен помнить неправильно, или я сделал это и просто don' t помнят. –  Kyle Brandt 11 December 2009 в 17:03

Мой совет: если Вы идете для абсолютной мобильности, запишите правила Оболочки Bourne использования, даже не беспокойтесь расширениями оболочки Korn. Как упомянуто, это - некоторые более старые "большие поля" вокруг этого, не имеют оболочек GNU на них вообще.

Bash уже делает "слишком много". У меня есть друг на работе, который предпочитает zsh, но я не знаю то, что точно это делает.

Так или иначе или запишите для Bourne (или "границы снова") оболочку, или поочередно при выполнении пользовательского сценария для небольшого количества определенных полей пропустите "ад оболочки" полностью и просто запишите жемчуг использования или Python (или независимо от того, что фаворит локально установил интерпретатор).

6
ответ дан 28 November 2019 в 19:53

Другая точка:

Много программ обеспечивают прохладное завершение удара по умолчанию. Для меня это - причина не переключиться.

[добавленный в июле 2013] Много позже нескольких лет использования zsh начиная с комментария выше, я должен сказать, что заполнение клавишей Tab (даже встроенное, w/никакие 3-и parety модификации) является блестящим и является похожим, это далеко вне того, предлагаемого ударом.:).

2
ответ дан 28 November 2019 в 19:53
  • 1
    Я думаю, что работы с ZSH также, с заполнением клавишей Tab в ZSH, получаю много программы определенные аргументы... –  Kyle Brandt 11 December 2009 в 16:43
  • 2
    Интересный. Вы говорите, что работа файлов завершения удара с zsh, или просто некоторые программы имеют его zsh-определенный материал завершения? Все еще there' s некоторое расположение станд. файлов завершения удара, какой zsh может или не может рассмотреть автоволшебно. Вы настроили свою конфигурацию zsh, чтобы заставить его работать? –  Wojciech Kaczmarek 11 December 2009 в 17:13
  • 3
    @Wojciech Kaczmarek: Я думаю, что Вы хотите 19.3 от следующего: zsh.sourceforge.net/Doc/Release/zsh_19.html . Честно, я никогда не не торопился для реального понимания этого, просто сорвал .zshrc, который я нашел онлайн :-) Но это завершит параметры командной строки из программ как Кв., grep, и т.д.... –  Kyle Brandt 14 December 2009 в 14:41
  • 4
    bash' s заполнение клавишей Tab очень похоже на zsh' s старая система заполнения клавишей Tab. Это - одна из идей, скопированных с zsh для избиения (существует скопированный удар других к zsh). Можно использовать сценарии завершения, записанные для, избивают zsh, путем выполнения " bashcompinit" и затем с помощью " complete" и/или " compgen" команды внутри zsh - это возможно, потому что функциональность удара является подмножеством этого доступного в zsh и быть эмулированной - также. Так there' s никакая причина переключиться на удар, потому что команда поставлется с завершением удара. –  Phil P 2 January 2010 в 05:06

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 сценарий, чтобы колотить, если я нуждаюсь в том мало функции для расширения существующего доказанный работавшего сценария и не имею времени для перезаписи его теперь.

13
ответ дан 28 November 2019 в 19:53

Кстати, здесь вам много раз говорили, что bash встречается практически везде, поэтому используйте его для написания переносимых скриптов, что неверно ].

Правильный способ написания переносимых сценариев unix - использовать sh , который встречается в каждой системе * nix .

Все остальные оболочки, кроме sh - это просто ваш ежедневный интерактивный инструмент.

При переходе к bash vs zsh - bash входит в дополнительные * nixes , чем zsh , поэтому здесь возникают недостатки установки дополнительного программного обеспечения в систему - вы должны поддерживать его. Некоторым людям нравятся "крутые функции" zsh, поэтому им нравится платить такую ​​цену, некоторым нет.

2
ответ дан 28 November 2019 в 19:53

В дополнение к указанной выше причине переносимости, еще одна причина может заключаться в том, что bash все еще добавляет функции.

Например, bash v4.x + представил:

  • рекурсивная подстановка:

    rm -f ** / *. log

  • autocd:

    Введите «/ tmp» вместо «cd / tmp»

5
ответ дан 28 November 2019 в 19:53

Кстати, здесь вам много раз говорили, что bash находится практически везде, поэтому используйте его для написания переносимых скриптов, ложь.

Ерунда. Если вы знаете, что каждая система, которая вам интересна, имеет BASH, это вполне разумное утверждение. BASH имеет множество полезных функций, которые невозможно эмулировать в POSIX sh. Легкомысленное использование функций, не относящихся к POSIX, - не лучшая идея, но использовать их, когда они вам действительно нужны, - это нормально.

Переносимость не абсолютна. Это спорно, насколько далеко вы должны принять его, так же как и все остальное. Например, Fedora использует команды оболочки для создания пакетов RPM, а в рекомендациях по упаковке Fedora указано, что, поскольку все пакеты должны быть изначально созданы на Fedora, можно использовать все функции BASH. Хотя теоретически другие дистрибутивы без BASH могут захотеть повторно использовать свои исходные RPM, они приняли решение о переносимости, основываясь на практичности, а не на вашей мантре «ВСЕГДА ИСПОЛЬЗУЙТЕ POSIX !! 1».

5
ответ дан 28 November 2019 в 19:53

Теги

Похожие вопросы