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

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

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

8 Solutions collect form web for “Есть ли преимущество использования Bash над Perl или Python?”

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Для коротких простых скриптов, которые вызывают другие программы, я буду использовать 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.

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

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

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

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

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

  • Как вызвать скрипт python из Perl?
  • Как найти текстовое описание смайликов, символов Unicode и emoji в строке (python, perl)?
  • count количество элементов xml из оболочки linux
  • Инструмент для преобразования регулярных выражений между различными синтаксисами языка?
  • Как я могу считать уникальные термины в незашифрованном файле с открытым текстом?
  • EXIF как вещь для видео
  • Выбор языка сценариев для начальной работы
  • Существует ли эквивалент Python для модификатора Perl «/ x» для регулярных выражений?
  • Python - лучший язык программирования в мире.