Рубрики
Без рубрики

Ваши сценарии Bash – мусор, используйте другой язык

Если вы не по -настоящему не потратили время и усилия, чтобы выучить входы и выходы сценариев оболочки, скорее всего, ваши шансы не подлежат. Tagged Bash, Linux, Python, реакция.

(Фото заголовка из сообщения nixcraft

TLDR:

  • Сценарий оболочки – это реальное программирование
  • Если вы хотите написать скрипт оболочки Узнайте это правильно
  • Используйте лучшие практики программирования, как и с другими языками
  • Источник контролирует это
  • Это странно своеобразно и нуждается в дополнительном внимании
  • Если вы не согласны с каким -либо из вышеперечисленного, используйте что -нибудь еще.

Таким образом, приведенным ниже была разглагольствование, которое я опубликовал в ответ на какой -то откат – кто -то предложил использовать Python вместо Bash, и несколько человек жаловались на то, как он излишне, как есть две версии Python, вам нужно получить правильно, или вам нужно получить это на машины в первую очередь, или тому подобное.

Я люблю сценарии Shell, и я все еще много использую, но я не дурак. Есть так много проблем, которые слепо защищать его для всех вариантов использования безрассудно.

Не в последнюю очередь потому, что в условиях компании большинство других людей вы будете работать с Не малейшей идеи Что они делают со сценариями оболочки. Они уже получают очки Брауни за то, что думают о том, чтобы поместить сценарии в управление источником, добрые оценки для написания вашего имени на вашем тесте.

Сценарий оболочки – это реальное программирование. Он должен контролироваться источником, код, просмотр и написан для чистых, поддерживаемых стандартов. Потому что этот код имел в виду для производства.

Итак, это то, что я ответил:

Если это персональная машина, установите Python – или другой язык выбора.

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

Shell хороша и великолепна, я сам подарк командной строки, и я все еще обращаюсь к сценариям Shell для большей части своей работы, но сценарий оболочки, который для более чем обертывания длинной трубы или двух быстро становится безумием, если вы на самом деле не положите В то время и усилия, чтобы правильно изучить язык. (Статья функции – это пример совершенно дерьмового кода, и их проблема еще не в пространстве имени файла, а их мусором обработки переменных и отсутствие каких -либо усилий для чистого написания)

Я обширный Bash Scripter, и стал так исторически только по причинам, перечисленным здесь, которые я когда -то считал вескими причинами. Все они могут быть проработаны – и накладные расходы по решению «Язык X не на нашей машинной ферме» часто лучше возвращается на усилия, чем годы некоммерческих хрупких сценариев оболочки, которые вы писали десятки и Непотематизируемые сценарии оболочки, которые запускают основы развертывания, сборки, управления фермами и многого другого – основы многих компаний.

Я видел сценарии баш -опытных разработчиков, и это также полный мусор. Ваш код может быть чище, чем в среднем, но это Чрезвычайно низкий батончик.

Сценарии Shell – это хорошие и мощные сами по себе, это правда, и я выступал за то, чтобы люди давали ему должное попытку изучить это, но грустная реальность такова, что никто не делает. Если это какой -либо «правильный» язык, они с радостью изучают входы, ожидая сверстников или унаследованное предвзятость; Но оболочка, даже если ты Узнайте это правильно, кто -то другой придет в соответствии с вашим чистым кодом, потому что их нельзя вырвать.

Я бесконечно настаиваю на том, чтобы разработчики и администраторы действительно научились правильно использовать Bash/Shell, использовать функции, инкапсулировать шаги логики, записать чистый код. «Это просто сценарий оболочки», «Это излишнее», «все в порядке», – «Я не хочу погружаться в это, это не настоящий язык».

Другая правда заключается в том, что в пространстве Sysadmins большинство из них даже не может писать чистый Python/Ruby/Perl/Php/JavaScript/Выбранный-ланг катастрофическая ошибка (из кодера (Steam Puce Wronge Whole?), Им лучше в более безопасной среде, чем сценарию оболочки.

Скрипт сценария многолетних проблем, которые являются не Вина кодера:

  • С радостью позволит вам уйти по умолчанию с неопределенными переменными (если вы явно set -ue )
  • Сравнение с назначением – единственное место, где имеет значение пространство ( a = b и A совершенно разные утверждения, WTF)
  • Вы не можете вернуть массивы из функций, только поток текста (сила и пятка Ахилля) (эта одна проблема усугубляет многих других, предотвращая написание обходных функций)
  • Массивы не могут быть переданы функциям в качестве отдельных элементов наряду с другими аргументами (вы можете использовать ссылки как способ обойти, но сколько сценариев из Bash знают их?) (Проще в использовании глобальных переменных, верно? yuck)
  • Переменные по умолчанию являются глобальными. Если вы не сделаете свою итерационную стойку локальной, вы не сможете увидеть некоторые ошибки Weeeeird
  • Разделение строк выполняется вокруг внутренней части строки, а не как функция, работающая на ней (мы все знаем, если знают ли все, знают ли, как ее использовать? не думал так)
  • На самом деле это то, что вы думали, что вы запускали? Когда -либо развернутые сценарии Bash только для того, чтобы обнаружить, что единственным интерпретатором на машине является штрих ? Или окружающая среда заставляет вас в sh по умолчанию? Или что на самом деле вы не бегите избиение но пепел ? Или, может быть, система по умолчанию бросаться . Во всяком случае, вы должны написать все сейчас в штрих и потерять любые улучшения это Bash когда -либо приносил это сделать задачу более терпимой.
  • Несовместимые среды для общих команд распространены. Ваш скрипт использует функцию «почта»? GNU или BSD, какие параметры использовать? Вы используете netcat ? Какой вариант, какие варианты? Вы используете TAR , Греп , rsync ? Вы используете реализации GNU, BSD или Busybox? (Эти вариации происходят бесконечно при смешивании Ubuntu, CentOS и альпийских развертываний, и это всего лишь поверхность)
  • (Я насмехаюсь над любым отказом от «обеспечения правильной версии Python в системах компании»)
  • Попытка чего-либо отдаленно управляемого событиями дает неприятную кучу обходных путей (я пытался с приглушенным успехом) Конечно, это пространство, для которого оболочка определенно не предназначена, но это значит, как далеко я пытался сделать все в Shell в какой -то момент. Это возможно, но это чертовски тяжелая работа, где другой язык был бы лучше.

В основном то, что взгляд на оболочку как «не правильный язык» препятствует импульсу в целом, чтобы правильно и широко изучать его и понять его собственные своеобразные. По крайней мере, с одним из других языков, разработчики имеют унаследованное мышление

Я все еще пишу тонны сценариев. Я люблю это. Но рекомендовать другим людям использовать другой язык гораздо более вменяемый. Лично я тоже выбрал Python. Но, в конце концов, я бы не рекомендовал это, если вы не собираетесь сделать все возможное, чтобы учиться. Это. Должным образом.

Оригинал: “https://dev.to/taikedz/your-bash-scripts-are-rubbish-use-another-language-5dh7”