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

Есть ли преимущество использования Bash над Perl или Python?

Эй, я некоторое время использовал Linux и подумал, что пришло время наконец погрузиться в сценарии оболочки.

Проблема заключается в том, что я не нашел существенного преимущества использования Bash над чем-то вроде Perl или Python. Существуют ли различия в производительности или мощности между этими двумя? Я бы подумал, что Python/Perl будет более подходящим для мощности и эффективности.

4b9b3361

Ответ 1

Приходят на ум два преимущества:

  • Простота: прямой доступ ко всем замечательным инструментам Linux wc, ls, cat, grep, sed... и т.д. Зачем постоянно использовать модуль python subprocess?
  • Я все больше люблю использовать gnu parallel, с помощью которого вы можете выполнять свои скрипты bash параллельно. Например. с man-страницы, пакетно создавать большие пальцы всех jpg в каталоге параллельно:

    ls *.jpg | parallel convert -geometry 120 {} thumb_{}

Кстати, у меня обычно есть некоторые вызовы python в моих сценариях bash (например, для построения). Используйте все, что лучше для задачи!

Ответ 2

Скрипты Perl обычно (если не в 100% случаев) быстрее, чем bash.

Обсуждение этого вопроса: Perl vs Bash

Ответ 3

Преимущество в том, что оно прямо там. Если вы не используете Python (или Perl) в качестве оболочки, запись script для выполнения простого цикла - это куча дополнительной работы.

Для коротких простых скриптов, которые вызывают другие программы, я буду использовать Bash. Если я хочу сохранить вывод, то шансы хорошие, что я буду торговать с Python.

Например:

for file in *; do process $file ; done

где process - это программа, которую я хочу запустить для каждого файла, или...

while true; do program_with_a_tendency_to_fail ; done

Выполнение любого из них в Python или Perl является излишним.

Для написания программы, которую я ожидаю поддерживать и использовать с течением времени, Bash редко является правильным инструментом для работы. В частности, поскольку большинство современных Unices поставляются как с Perl, так и с Python.

Ответ 4

bash - это не язык, а интерпретатор команд, который был взломан до смерти, что позволяет делать вещи, которые делают его похожим на язык сценариев. Это отлично подходит для простейших однострочных однострочных задач 1-5, но вещи, которые просты в Perl или Python, как манипуляции с массивами, ужасно уродливы в bash. Я также обнаружил, что bash имеет тенденцию не пропускать два важных эмпирических правила:

  • 6-месячное правило, в котором говорится, что вы должны легко различить цель и основную механику script, которую вы написали, но не просмотрели через 6 месяцев.

  • Правило "WTF за минуту". У каждого свой предел, а у меня довольно мало. Как только я доберусь до 3 WTF/мин, я ищу в другом месте.

Что касается "обтекания" на языках сценариев, таких как Perl и Python, я считаю, что мне почти никогда не нужно это делать, fwiw (отказ от ответственности: я кодирую почти 100% в Python). Модули os и shutil Python имеют большую часть того, что мне нужно большую часть времени, и есть встроенные модули для обработки tarfiles, gzip файлов, zip файлов и т.д. Там есть модуль glob, модуль fnmatch... там много там. Если вы сталкиваетесь с чем-то, что вам нужно распараллелить, то отступьте ваш код на уровень, поместите его в метод "run()", поместите это в класс, который расширяет либо threading.Thread, либо многопроцессорность. Process, создайте экземпляр так, как многие из них вы хотите, называя "start()" на каждом из них. Менее 5 минут, чтобы выполнить параллельное выполнение в целом.

Удачи. Надеюсь это поможет.

Ответ 5

Для больших проектов используется язык Perl.

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

Плюс бывают случаи, когда зная, что колодец хорошо может спасти ваш бекон (на взломанной системой, где вы не можете запускать какие-либо новые процессы, или если /usr/bin и /usr/local/bin не смонтированы).

Ответ 6

Самое важное преимущество скриптов оболочки POSIX над сценариями Python или Perl состоит в том, что оболочка POSIX доступна практически на всех машинах Unix. (Есть также несколько сценариев командной оболочки, для которых это немного удобнее, но это не является серьезной проблемой.) Если переносимость не является проблемой для вас, я не вижу большой необходимости изучать сценарии оболочки.

Ответ 7

Если вы хотите выполнить программы, установленные на компьютере, ничего не будет bash. Вы всегда можете сделать системный вызов с Perl или Python, но я считаю, что это неприятность для чтения возвращаемых значений и т.д.

И поскольку вы знаете, что он будет работать практически везде в течение всего времени...

Ответ 8

Преимущество сценариев оболочки заключается в том, что он глобально присутствует на * ix-блоках и имеет относительно стабильный набор основных функций, на которые вы можете положиться, чтобы работать везде. С Perl и Python вам нужно беспокоиться о том, доступны ли они, и если да, какая версия, так как на протяжении всей их жизни существуют значительные синтаксические несовместимости. (Особенно, если вы включили Python 3 и Perl 6.)

Недостатком сценариев оболочки является все остальное. Язык сценариев командной строки обычно не имеет выразительности, функциональности и производительности. И взломать командные строки вместе со строками на языке без сильных функций обработки строк и библиотек, чтобы гарантировать правильность экранирования, вызывает проблемы безопасности. Если у вас нет убедительной причины совместимости с оболочкой, я бы каждый раз путал язык сценариев.