Подтвердить что ты не робот

Bash vs csh vs others - что лучше для обслуживания приложений?

Возможный дубликат:
Какую оболочку Linux я должен использовать?

Я начинаю разбираться в среде Linux, и я пытаюсь выбрать подходящее оружие с точки зрения сценариев командной оболочки (поскольку я все еще большой n00b), которые помогут мне (и другим) управлять, тестировать и администрировать набор серверных приложений, работающих в среде * NIX.

Мой вопрос: что является (являются) предпочтительной командной оболочкой там, где рассматриваются следующие критерии:

  • Насколько легко учиться/понимать для младшего разработчика, у которого никогда не было воздействия на сценарии оболочки?

  • Есть ли большой пул разработчиков, которые знают эту оболочку script?

  • Безопасно и просто в использовании - будут ли ошибки script затихать или выдавать интеллектуальные ошибки, позволит ли это непосвященным снимать себя в ногу?

  • Насколько он переносим? - Могу ли я ожидать, что тот же самый script будет запущен в OpenSolaris, а также Redhat, FreeBSD? (предоставленный командный синтаксис и опции для конкретной ОС соответственно изменятся)

  • Насколько это стандартно? Ожидается, что он будет включен в большинство дистрибутивов * NIX или он должен быть установлен дополнительно?

Я понимаю, что там есть лагеря, которые испытывают сильные чувства к/против определенных командных оболочек, я просто ищу информированного мнения.

4b9b3361

Ответ 1

В наши дни практически любая не встроенная (или большая встроенная) операционная система имеет POSIX: 2001 aka Single Unix v3 уровень совместимости, Это является родным на платформах unix (Linux, Mac OS X, Solaris, * BSD и т.д.) И устанавливается на другие платформы, такие как Windows и Android. POSIX определяет shell язык, обычно известный как POSIX sh. Этот язык получен из оболочки Bourne.

Большинство систем unix имеют одну из двух реализаций POSIX sh: ksh или bash, которые имеют дополнительные полезные функции по сравнению с POSIX. Однако некоторые менее распространенные системы (особенно встроенные) могут иметь только функции, поддерживаемые POSIX.

Учитывая ваши цели, я вижу три варианта:

  • Ограничьте себя POSIX sh. Pro: вам не нужно беспокоиться о разных вариантах, поскольку там доступны стандартные и совместимые реализации. Con: вы не пользуетесь расширениями bash и ksh.
  • Используйте пересечение ksh и bash. Это привлекательно по внешнему виду, но это означает, что вам нужно использовать два справочных документа вместо одного - и даже те функции, которые имеют bash и ksh, не всегда используют один и тот же синтаксис. Выяснение того, какой из них вы хотите использовать в данной системе, также является болью.
  • Выберите один из ksh или bash. Оба bash и ksh доступны на всех Unix-подобных платформах и в Windows. Оба имеют реализацию с открытым исходным кодом (единственная для bash, ATT ksh93 для ksh), которая может быть установлена ​​на большинстве платформ. Я поеду за bash через ksh по двум причинам. Во-первых, это значение по умолчанию для Linux, поэтому вы найдете больше людей, которые привыкли к этому. Во-вторых, существуют системы, которые поставляются с более старой, менее функциональной реализацией ksh; даже если вы можете установить ksh93, это еще одна вещь, о которой вы должны думать при развертывании.

Забудьте о csh для скриптинга и забудьте о zsh, если хотите общую доступность по умолчанию.

См. также Каковы основные отличия между основными файлами * NIX-оболочек?, в частности часть "для скриптинга" мой ответ.

Обратите внимание, что программирование оболочки включает в себя другие утилиты за пределами оболочки. POSIX задает эти другие утилиты. "Bash плюс другие утилиты POSIX" - разумный выбор, отличный от "Утилиты POSIX (включая sh)".

Ответ 3

Z shell (zsh)

Он сказал, что zsh сейчас самый мощный, поэтому я бы рекомендовал попробовать его.

  • Независимо от того, какую оболочку вы узнаете, их синтаксис очень похож. Только встроенные команды могут немного отличаться. Но не выбирайте те старые и незапятнанные.
  • Bash является самым популярным. Но почти каждая команда в bash работает в zsh одинаково. Конечно, есть некоторые исключения.
  • AFAIK, каждая оболочка обрабатывает его одинаково. Но будьте осторожны: оболочки - глупые, они не такие умные, как языки программирования.
  • Я видел, что zsh работает на всех Linux, FreeBSD и OpenSolaris.
  • См. 4. У Distros есть zsh в своих репозиториях.

Почему я предпочитаю zsh (Z shell) до bash:

  • соответствующие следующим образом: for file in ./**/*.java; do ... (я имею в виду ./**/*.ext)
  • хочет подтвердить, когда я сделаю rm *:)
  • tab-autocompletion намного лучше, я могу написать dmdomi[tab] и предлагает dnddomainname. java хочет имя класса в качестве первого параметра, zsh предложит все классы, доступные в пакете и всех подпакетах.

Но вы не ограничены только zsh. Если что-то не работает для вас, вы просто пишете его в bash или sh. Это то, что "#!/bin/bash" поверх script for.: -)

Чтобы начать быстро, используйте мой .zshrc config: http://www.rozne.geozone.pl/.zshrc Единственное, что вы должны изменить, это export LANG="pl_PL.UTF-8". Вероятно, вы не хотите польского языка.

Ответ 4

Сценарии оболочки для любой оболочки * nix обычно обманчиво просты. Легкие вещи, как правило, легкие, иногда тяжелые вещи легки, иногда легко-кажущиеся вещи сложны. Никакая оболочка особенно лучше других в этой области, но некоторые из них хуже (я не могу серьезно рекомендовать csh). Некоторые скажут, что bash - самая худшая "современная" оболочка, которая может быть правдой, но вы все равно не можете полностью ее избежать.

Есть аргумент, согласно которому использование самой "популярной" оболочки лучше всего подходит для удобства обслуживания по той же причине, что Windows лучше (и я не говорю, что это так): легко найти людей, которых вы можете нанять, которые знают как это использовать. Есть просто больше людей, которые, по крайней мере, знакомы с bash -специфическими особенностями, скажем, чем ksh или zsh. Поиск людей, которые действительно понимают, что они делают, - это другое дело.

Все раковины имеют различные gotchas, угловые случаи и странное поведение. В основном это сводится к тому, к чему вы привыкли. Стрельба в ногу - это то, что я назвал бы великой традицией Unix, и никакая оболочка nix действительно не оставит вас в безопасности.

Почти каждая оболочка, которую вы увидите, очень портативна практически для каждой платформы. Несмотря на то, что это правда, вы не будете иметь возможность запускать те же самые (скажем) bash script в трех разных блоках, если не будете осторожны в отношении того, какие утилиты вы использовали и какие параметры вы их передали. Написание переносимых сценариев оболочки сложно по причинам, не имеющим никакого отношения к той оболочке, в которой они написаны.

Почти каждый Linux использует bash по умолчанию и имеет большинство доступных оболочек. FreeBSD включает sh, csh и tcsh по умолчанию с bash и другими в портах. Когда-то давно Mac OS X по умолчанию использовал tcsh, но теперь использует bash по умолчанию и включает zsh вместе с большинством распространенных оболочек. Помимо этого я не могу комментировать.

Лично я использую bash из (большей) инерции. Если бы я не был с ним знаком, я бы вместо этого использовал zsh.

Ответ 5

bash является стандартным и очень хорош в интерактивном использовании (хорошее завершение, поддерживающее многие программы, историю, поддержку readline, много типов расширения строки). Он также хорош для написания сценариев, для оболочки (массивы и хэши, цитирование, строковые манипуляции); хотя для написания надежных сценариев вам нужно учиться намного больше.

Если вы хотите, чтобы ваши программы могли расти, работать с сложными структурами данных и использовать некоторые полезные библиотеки, вы должны изучить язык, такой как python, ruby ​​или perl. Большинство из них имеют интерактивные интерпретаторы, а не так удобно, как оболочка, но полезны для быстрого тестирования. IPython для Python особенно полезен; он позволяет легко просматривать документацию, загружать и перезагружать исходный код, включает в себя отладчик. Он также включает в себя некоторые стандартные команды оболочки и может передать остальные в стандартную оболочку, префикс их с помощью !.

  • Благодаря интерактивному большинству оболочек достаточно просто изучить, как только вы начнете использовать их исключительно
  • Я считаю, что bash, и подмножество posix, лучше известно с большим отрывом. Но языки, о которых я упоминал, также известны как многие оболочки.
  • Вы можете легко стрелять себе в ногу, удобство часто делает нежелательные вещи легкими.
  • и 5. Переносимость оболочки сама по себе не должна быть проблемой; вам может потребоваться перекомпиляция, чтобы получить более современные функции на некоторых из упомянутых вами ОС. Использование полномасштабного языка с его собственными библиотеками поможет смягчить разнообразие вашей платформы.