Пока мы делаем все наши сценарии с Bash, но я начинаю чувствовать себя немного глупо по этому поводу. Хотя мы, конечно, можем делать все, что хотим, с помощью Bash (это довольно мощно), я начинаю задумываться, не следует ли нам вместо этого использовать надлежащий язык сценариев (в нашем случае, скорее всего, Ruby).
Как вы решаете, когда использовать Perl / Python / Ruby поверх Bash для скрипта? Я не думаю, что скрипт инициализации с Ruby имеет смысл, но как насчет немного более длинного скрипта, который добавляет учетные записи электронной почты?
Ответы:
Учитывая проблему, с которой могут справиться оба, вы захотите использовать ту, которая вам наиболее удобна. В конечном счете, есть много мелких деталей, и только опыт может научить вас видеть их.
Bash - это язык сценариев общего назначения, такой же, как Python, Ruby, Perl, но каждый из них имеет свои сильные стороны. Perl превосходен в анализе текста, Python претендует на звание самого элегантного из всех, сценарии Bash отлично справляются с "обкаткой", если вы понимаете, о чем я, и Ruby ... ну, Ruby немного особенный способов.
Тем не менее, различия между ними действительно имеют значение только тогда, когда у вас есть достаточный опыт написания сценариев под вашим поясом. Я предлагаю вам выбрать один язык и довести его до предела, прежде чем переходить к следующему. Вы можете многое сделать в сценарии оболочки, больше, чем допускает большинство людей. Любой язык настолько сложен, насколько вы хотите. После того, как вы написали в нем пару вещей, каждый язык для вас «легкий».
Быть знакомым с оболочкой быстро окупается, если вы живете в Linux, поэтому, возможно, вы захотите начать с этого. Если вы найдете задачу, которую невозможно или непрактично решить в сценарии оболочки, используйте что-то еще.
Также имейте в виду, что изучение сценариев оболочки очень просто. Реальная сила этого заключается в других программах, таких как awk, sed, tr и др.
источник
TL; DR - используйте bash только для установки лучшего языка (если он еще не доступен), в противном случае вы теряете необратимое, драгоценное человеческое время. Если вы не можете сделать это вручную из командной строки без ошибок, не используйте скрипт bash / shell.
Это 2015 год, поэтому я хотел бы рассмотреть следующее:
накладные расходы памяти
время запуска
представление
производительность
Я считаю, что нет смысла использовать Bash / Shell, если у вас установлен Ruby / Python.
И, вероятно, для установки Ruby / Python даже не нужен bash-скрипт (за исключением busybox, некоторые системные инструменты в любом случае зависят от наличия Python / Perl).
И каждый раз, когда вы пишете сценарий оболочки, вы «тренируетесь» делать именно это - вместо изучения чего-то более мощного / продуктивного.
Почему люди сегодня используют Bash? Потому что это ужасная привычка, которую трудно сломать. Сценарий редко "завершается навсегда" после первых нескольких минут - независимо от того, насколько сильно люди склонны так думать. Вместе с ошибкой «это последняя ошибка в этом сценарии».
Вывод: используйте bash / shell только тогда, когда вы абсолютно вынуждены (например
~/.bashrc
, busybox), потому что в настоящее время это почти никогда не «подходящий инструмент для работы».источник
Я использую bash, когда основное внимание уделяю обработке файлов. Это может включать перемещение, копирование и переименование файлов, а также использование файлов в качестве входных данных для других программ или сохранение выходных данных других программ в файлах. Я редко пишу код bash, который на самом деле проверяет содержимое файла или генерирует вывод для записи в файл; Я оставляю это другим программам (которые я могу написать на Perl или Python), которые я запускаю через bash.
Я использую Perl и python, когда основное внимание уделяю чтению данных из файлов, некоторой обработке этих данных и записи результатов в файлы. Если я обнаружу, что использую (в Perl)
system
команду, тики назад или (в python)subprocess
модуль слишком широко, я считаю, что писать сценарий на bash. С другой стороны, я иногда начинаю добавлять столько функций в скрипт bash, что в конечном итоге имеет смысл переписать его на Perl / python, а не иметь дело с ограниченной (для сравнения) поддержкой bash для определения области переменных, функций, структур данных и т. Д. ,источник
=~
поддерживаемого оператора[[ ]]
мне очень понравился Bash для простого чтения файлаМне нравятся критерии, изложенные в этом блоге .
источник
Я нашел этот анализ Perl против Bash полезным ...
http://blogs.perl.org/users/buddy_burden/2012/04/perl-vs-shell-scripts.html
Для удобства я копирую краткое изложение этого автора: 1) когда bash - лучший вывод, и 2) когда perl - лучший вывод ...
Когда Bash лучше ...
Когда Perl лучше ...
источник
fail "error" unless system("foobar")
).По моему опыту, bash против python - это компромисс между временем разработки и гибкостью. Примитивное решение проблемы обычно может быть установлено в скрипте bash быстрее, чем в скрипте python.
Python, как правило, заставляет вас больше думать о структуре вашего решения, чем эквивалентный сценарий bash. Python обладает большей выразительной силой, чем скрипт bash, поэтому он имеет тенденцию лучше масштабироваться и изменяться со временем. Это также остается более читабельным в целом.
Bash ближе к файловой системе и может отлично подойти для первого чернового варианта решения проблем, которые не определены четко. По этой причине bash-скрипт может быть хорошим первым вариантом для прототипирования чего-либо с полным намерением перенести его на python, как только проблема будет лучше понята.
источник
Bash - это оболочка Unix, включающая язык сценариев. Это скорее командный процессор. вы управляете тем, как вы запускаете команды, вы фактически запускаете их.
Perl / Ruby / Python являются языками общего назначения.
Когда вы хотите сценарий оболочки, вы используете Bash
Если вы хотите более сложную задачу или не связаны с оболочкой. Используйте Python и т. Д.
Я бы никогда не сравнил эти языки на самом деле. Python и т. Д. Являются портативными. Вы можете запустить их где угодно. Bash только для Unix.
Python и т. Д. Имеют тонны многократно используемых библиотек, решающих миллионы задач.
Это почти то же самое, если вы спросите. «Когда использовать Paint, а когда использовать Photoshop»
Для обработки электронных писем я бы снова использовал Ruby, потому что в нем много многократно используемых библиотек.
Но лучшим способом было бы совместить bash и ruby. Это было бы правильно. Как будто вы создаете сценарий обработки электронной почты в ruby, а bash-скрипт вызывает этот сценарий ruby и запускает другие команды ds.
Поэтому, когда вам нужен командный процессор, вы используете bash. Вы запускаете команды Unix и управляете ими.
ОБНОВЛЕНИЕ через 7 лет (март 2019)
Хотя основная часть моего ответа не изменилась, я хотел бы отметить это.
Bash также является мощным скриптовым языком. Для обработки текста это может быть абсолютно законным выбором.
Пожалуйста, прочитайте комментарии mkaito ниже. Все они полностью правдивы.
источник
Сценарии оболочки, такие как bash, ksh, zsh, sh и fish, как известно, удивительны по сравнению с универсальными языками высокого уровня, такими как Ruby, Python или Perl. Хотя сценарий оболочки может начать свою жизнь в виде более короткого файла, чем эквивалентный сценарий общего назначения, неожиданности приводят к большому количеству защитного кода, например,
set -euo pipefail
для включения строгих режимов.Например, большинство языков оболочки продолжают выполнять строки в сценарии оболочки, даже если одна из команд не выполняется. В отличие от этого, язык общего назначения дает сбой сразу при первой ошибке и часто загружается, что приводит к более безопасному и более предсказуемому поведению в сценариях даже легкой сложности.
источник
Очень предвзятая статья.
Я не считаю, что bash так сложно отлаживать. Python часто слишком жесток, тогда как bash позволяет вам быть очень креативным. Если вы хороший нестандартный мыслитель, вам понравится Bash.
Я запускаю bash-скрипты на миллионах считываний секвенирующих ДНК в тысячах файлов, и это отлично мне подходит. И вопреки тому, что все говорят, одни и те же версии скриптов в C ++ на самом деле не работают намного быстрее (их разделяют на несколько минут).
Я думаю, что bash, как и perl, не самый удобный и легкий для чтения. Это пугает людей, потому что большинство людей не являются великими абстрактными мыслителями. Но более яркие, более творческие программисты любят это и часто используют его. Если ты знаешь себя и знаешь, что у тебя есть мозг, не пугайся bash. Если вы простой мыслитель, возможно, придерживайтесь чего-то вроде Python. Каждому свое.
источник
Из "Книги ламы"
источник
Как правило, используйте самый простой язык, который имеет достаточно хорошую производительность для вашей задачи под рукой. И его особенности только в той мере, в которой они действительно полезны.
А что касается читабельности, Bash ужасен, если ваш стиль программирования ужасен. Если вы просто выбросите туда код, он станет неясным.
Но если вы разбиваете код на кратчайшие функции и называете вещи простым понятным образом, это самый ясный язык, который вы можете найти. Потому что это очень кратко.
Как образец, это мой последний код на Bash. Обратите внимание, как легко понять и напечатать это:
источник