Есть ли преимущество использования 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.)

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

  • Презентации по переходу с Perl на Python
  • Выбор языка сценариев для начальной работы
  • Как я могу читать структуры данных Perl из Python?
  • Есть ли у Python что-то вроде переменных состояния «Perl 5.10»?
  • поиск отсутствующих значений в диапазоне с использованием любого языка сценариев - perl, python или shell script
  • Проблемы со скоростью обработки текстовых файлов Python
  • Прослушивание событий клавиатуры без их захвата?
  • Элегантный синтаксический анализ текстового файла
  • Perl Inline :: Модуль Python, как поместить код в строку
  • В режиме реального времени перехват stdout из другого процесса в Python
  • Динамически называют процессы
  •  
    Interesting Posts for Van-Lav

    обновление модуля python в коде

    КАК использовать Pycharm для отладки скрипта python?

    Получить «плоский» элемент для автомодуля sphinx

    Сохранять историю версий Field в модели Django

    Сплайн-представление с scipy.interpolate: слабая интерполяция для низкоамплитудных, быстро осциллирующих функций

    Есть ли способ использовать Python 3.5 на Cygwin?

    Объединить столбцы даты и времени с использованием python pandas

    Как добавить несколько элементов в одну строку в Python

    Список идентификаторов сообщений для чтения pylint?

    Существуют ли полезные библиотеки для поиска путей для python?

    (Python) Как получить диагональ (A * B) без необходимости выполнять A * B?

    Выпуклая оболочка в более высоких размерностях, нахождение вершин многогранника

    Создание динамического обновленного графика с помощью Python

    Тензорный поток: эффективная подача данных eval / train с использованием бегунов очереди

    Как использовать форматирование строк для динамического назначения переменных

    Python - лучший язык программирования в мире.