LINUX.ORG.RU

bash sed awk против perl python или УСТАРЕЛО [родина]

 , , , ,


0

4

Не раз встречал утверждения что мол первые трое ненужно и устарело, и чсх не только в лоробсуждениях но и в некоторых серьезных(вроде) книжках. И все-таки, правда ли что python или perl содержат в себе все названное перед ними, ну т е вопрос состоит в том действительно ли так намного удобнее пользоваться? Мне доставляет писать на bash и я не понимаю зачем может понадобиться python в админстве. Потому что в нем ООП и исключения? И много вам хотелось этого ооп в админских скриптах? Прошу аргументированно убедить что bash и sed достаточно со всем справляются и вовсе не обязательно еще учить всякое со встроенными регэкспами в синтаксис или модненькое с ооп. Спасибо.



Последнее исправление: Zaskar (всего исправлений: 1)

Мне доставляет писать на bash и я не понимаю зачем может понадобиться python в админстве.

Прошу аргументированно убедить что bash и sed достаточно со всем справляются

Если вам хватает bash, то зачем вас убеждать в том, что bash достаточно?

Но, на bash всё хорошо, пока вокруг хорошо. А если закладывать в скрипт, что имена файлов могут содержать любые символы (кроме ″/″ и NUL), то всё становится сложновато...

mky ★★★★★
()
Ответ на: комментарий от mky

Если вам хватает bash, то зачем вас убеждать в том, что bash достаточно?

Потому что ничего другого не знаю. Панический страх засорить память ненужным синтаксисом и функциями. (к тому же питоном уже слегка засорил и никак не могу забыть). Или все-таки нужным и нужными? Лорчане скоро расскажут.

Zaskar
() автор топика

платина

Мы же договорились про родий.

EXL ★★★★★
()

пишу на bash, причём обхожусь без grep, sed, awk, иногда стараюсь принципиально писать на чистом posix shell, тогда без вышеназванных grep, sed, awk никуда.

язык это во многом его коммьюнити, если по всему миру не соберётся 100500 разработчиков, которые активно пилят различные библиотеки под язык, то для большинства пользователей такой язык считается говном. поэтому писать на perl, python так просто.

потому что пользователи не хотят изучать что-то низкоуровневное, они хотят писать сраный код, не вникая в суть, как он работает. отсюда имеем много безграмотных кукаретиков.

много ли нынче программистов знают ASCII таблицу наизусть? не важно, в какой системе исчисления. суть не в самом знании ASCII наизусть, а том, что человек, который например работал с файлами на низком уровне, ковырял заголовки различных форматов файлов — волей не волей будет запоминать всё это. это говорит о богатом опыте разработке различных приложений.

много ли веб-программистов знают, как работает веб-сервер? много ли веб-программистов смогут написать простеньую реализацию на коленке, на листочке бумаги, для собеседования? чёт сомневаюсь. а это опять же, готовит об опыте веб-программиста.

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

и когда на ЛОРе спрашиваешь например, чем распарсить HTML-документ какой-нибудь, то все отправляют тебя использовать готовые библиотеки для всяких python, perl, которые не дадут тебе никаких знаний опыта в парсинге HTML-документов, а лишь решат задачу вместо тебя.

на bash, к слову, парсинг HTML/XML делается в одну строку

IFS='<' read -r -d '>' -t 5 DOM_CONTENT DOM_ENTITY

но мало кто это знает. все просто скажут — «используй \„нормальный\“ ЯП, там уже всё сделано _за тебя_»

Spoofing ★★★★★
()

Пишу на баше развесистые вещи just for fun. Согласен, что нужно заменять его на нормальный скриптовый ЯП, но где его взять?

Короче, хочу смесь PowerShell с Python'ом.

intelfx ★★★★★
()
Ответ на: комментарий от Spoofing

на bash, к слову, парсинг HTML/XML делается в одну строку

IFS='<' read -r -d '>' -t 5 DOM_CONTENT DOM_ENTITY

И что эта одна строка даст? Кто будет дерево строить? А кто будет валидировать?

То, что ты написал, на любом достаточно высокоуровневом ЯП делается в одну строку.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от Spoofing

много ли веб-программистов знают, как работает веб-сервер? много ли веб-программистов смогут написать простеньую реализацию на коленке, на листочке бумаги, для собеседования? чёт сомневаюсь. а это опять же, готовит об опыте веб-программиста.

Но ведь им же нужно заработать денех, а не узнавать что там внутри устроено. А вообще, вот взять и ограничить все и вся только C++ и scheme(предварительно наконец-то перенеся emacs на guile) и всем бы было счастье же, всегда было бы очевидно какой язык под что использовать. Ну и брошенный scheme shell доделать.

Zaskar
() автор топика
Ответ на: комментарий от Spoofing

много ли веб-программистов знают, как работает веб-сервер? много ли веб-программистов смогут написать простеньую реализацию на коленке, на листочке бумаги, для собеседования? чёт сомневаюсь. а это опять же, готовит об опыте веб-программиста.

Много ли веб-программистов работают сторожами?

EXL ★★★★★
()
Ответ на: комментарий от intelfx

Мало ли на что оно ориентировано. Прекрасно работает как шелл с вменяемым ЯП.

Akamanah ★★★★★
()

В заголовке бред. На баше легко писать то, что на perl/python сложно и наоборот. Это разные языки для разных задач. Ты предлагаешь забивать гвозди лопатой и копать землю молотком.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Чому бред? Внимательнее. Речь о том почему все пешут что sed'ы и awk'и не нужны, почему считают что то же самое использовать в перлах и питонах удобнее стало.

Zaskar
() автор топика
Ответ на: комментарий от Zaskar

Лишней информации не бывает. Чем больше ты знаешь, тем лучше. Жалеть можно лишь о бесцельно потраченном времени.

KivApple ★★★★★
()

Мне доставляет писать на bash и я не понимаю зачем может понадобиться python в админстве.

Мне доставляет писать на python и я не понимаю зачем мне писать на bash то, что на python я напишу быстрее и проще. вопрос выбора и личного удобства

И много вам хотелось этого ооп в админских скриптах

говорить про python и заострять внимание на одной парадигме нет смысла, это мультипарадигменный язык

действительно ли так намного удобнее пользоваться?

не настолько, чтобы выучить 2й ЯП и решать ими одинаковую задачу. Нет смысла учить python или perl только ради скриптов автоматизации, если с этим лично у вас уже справляется bash

к тому же питоном уже слегка засорил и никак не могу забыть

было бы чем засорять, чтобы узнать что-то, что принципиально отличает python от остальных си-подобных (не совсем верно выразился, но не суть) языков в плане синтаксиса, нужно копнуть сильнее админских скриптов

Dred ★★★★★
()
Последнее исправление: Dred (всего исправлений: 1)
Ответ на: комментарий от Zaskar

sed'ы и awk'и не нужны

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

Dred ★★★★★
()
Последнее исправление: Dred (всего исправлений: 1)
Ответ на: комментарий от Zaskar

Внимательнее

Упс. Прошу прощения.

Чому бред?

Пишут они бред. В пёрлах и питонах пайпы всякие не удобно делать. А на баше логику писать. Итого: баш <-stdin/stdout-> perl.

crutch_master ★★★★★
()

Это идиотский идеализм. Для меня это лакмусовая бумажка того, насколько компетентен автор (сообщения, например).

Искать один идеальный ЯП глупо. Каждый ЯП хорош для своих своих сфер. Мое представление, что bash - для относительно небольших скриптов (до 500 строк) где часто идет вызов внешних команд. Ну, и никто не отменял принцип «пользуйся тем инструментом, который знаешь».

P. S. И вообще, 95% сообщений о выборе чего-либо, которые содержат слова «все», «всегда», «для всех случаев» и т. п. (или подразумевают это) являются неверными.

Kroz ★★★★★
()
Ответ на: комментарий от Deleted

open SPOOLER, «| cat -v | lpr -h 2>/dev/null»

Ты что сказать то этим хотел, что на пёрле пайпы удобно делать?

crutch_master ★★★★★
()
Ответ на: комментарий от Deleted

факты

pipe(FROM_PARENT, TO_CHILD)     or die "pipe: $!";
pipe(FROM_CHILD,  TO_PARENT)    or die "pipe: $!";
select((select(TO_CHILD), $| = 1))[0]);   # autoflush
select((select(TO_PARENT), $| = 1))[0]);  # autoflush

if ($pid = fork) {
    close FROM_PARENT; close TO_PARENT;
    print TO_CHILD "Parent Pid $$ is sending this\n";
    chomp($line = <FROM_CHILD>);
    print "Parent Pid $$ just read this: `$line'\n";
    close FROM_CHILD; close TO_CHILD;
    waitpid($pid,0);
} else {
    die "cannot fork: $!" unless defined $pid;
    close FROM_CHILD; close TO_CHILD;
    chomp($line = <FROM_PARENT>);
    print "Child Pid $$ just read this: `$line'\n";
    print TO_PARENT "Child Pid $$ is sending this\n";
    close FROM_PARENT; close TO_PARENT;
    exit;
}

Пайп на чистом пёрле делается примерно так. А в первом примере - sh.

crutch_master ★★★★★
()

Не раз встречал утверждения что мол первые трое ненужно и устарело

Ни разу не встречал такого мнения.

Как верно отметили, если тебе хватает bash+sed+awk, пользуйся ими. В твоей конкретной ситуации они выполняют свою задачу. В какой-то другой ситуации удобнее будет на питоне. Я лично использую sed и grep в однострочниках или достаточно коротких скриптах, либо для простых случаев, когда основная суть скрипта не в этом, и надо вызывать много различных внешних команд. Для более сложных случаев обычно питон. Но если тебе хватает sed и awk, то не слушай никого, а просто делай то, что нужно, так, как привык.

Psych218 ★★★★★
()
Ответ на: комментарий от Zaskar

На баше, зная утилиты вроде sed и awk и прочие, ты сделаешь задачу быстрее чем на питоне.

WRG ★★★★
()

правда ли что python или perl содержат в себе все названное перед ними

И да и нет. Окружение sh строится на готовых программах, кто назовет мне сходу перловый модуль (без поиска на CPAN) на замену mpg123? Да, чтобы просто проиграть файл mp3, скажем звонок для сигнала об аварии. А есть ли этот модуль в вашем дистрибутиве (в репах)? ;)

действительно ли так намного удобнее пользоваться?

Удобство понятие растяжимое. Пишу и на sh и на perl в зависимости от задачи.

Прошу аргументированно убедить что bash и sed достаточно со всем справляются и вовсе не обязательно еще учить всякое со встроенными регэкспами в синтаксис или модненькое с ооп.

ООП давно не в моде, в моде big data и облака :) Рекомендую изучить хоть один ЯП (не HTML и не js), чтобы ощутить разницу.

Ты пока столкнулся с тем, что тебе надо писать какие-то скрипты. А есть класс задач, где надо писать программы (скажем демон, чтобы работал относительно быстро, умел в потоки/процессы, работал с БД, работал с клиентами по REST + решал какую-то задачу). И да, это уже считается в некоторых местах админской задачей, а не программерской.

Нет смысла тебя в чем-то убеждать, оставайся обычным админом :)

gh0stwizard ★★★★★
()

Ничего, что на awk можно сделать всё, что ты делаешь на bash+sed и это комбайн не намного меньше перла?

x3al ★★★★★
()
Ответ на: комментарий от gh0stwizard

А есть класс задач, где надо писать программы (скажем демон, чтобы работал относительно быстро, умел в потоки/процессы, работал с БД, работал с клиентами по REST + решал какую-то задачу). И да, это уже считается в некоторых местах админской задачей, а не программерской.

Дак для этого я возьму C++, зачем учить еще питон.

Zaskar
() автор топика
Ответ на: комментарий от Spoofing

потому что пользователи не хотят изучать что-то низкоуровневное

тут еще можно поспорить, что более низкоуровневое, perl/python или sh. Это скриптовый, почти чисто интерпретируемый язык, выразительные возможности его выше, там искаропки метапрограммирование естественным образом вытекает. Так что шелл — это более высокоуровневый язык чем py/pl, то что в последних куча сахара, к вопросу отношения не имеет. Причем я сам очень хреново знаю шелл, так что мое мнение непредвзято:)

javaQest
()

Если не учитывать религиозные особенности, то можно(и, вероятно, выгодно) использовать *sh. если автор видит возможность записать результат в виде, похожем на(% синтаксис используемого shell-а):

программа ( («&&»|«||»|«|»|«;» и т.п.) программа )*

В противном случае лучше этого не делать.

DonkeyHot ★★★★★
()
Ответ на: комментарий от Zaskar

Речь о том почему все пешут что sed'ы и awk'и не нужны, почему считают что то же самое использовать в перлах и питонах удобнее стало.

Ты под «удобнее» подразумеваешь удобство напейсания. А это большая ошибка. Удобство сопровождения гораздо важнее. С которой у баша все очень и очень грустно. А еще баш не умеет в контроль переменных, что периодически выливается в rm -rf $tempdir/* от рута, когда - сюрприз - tempdir не определена, потому что правильное имя было temp_dir...

Deleted
()
Ответ на: комментарий от Zaskar

Дак для этого я возьму C++, зачем учить еще питон.

На плюсах он будет работать в два раза быстрее, а писаться - в 20 раз дольше. А машинное время нынче дешевле инженерного.

Deleted
()
Ответ на: комментарий от Deleted

еще баш не умеет в контроль переменных, что периодически выливается в rm -rf $tempdir/* от рута, когда - сюрприз - tempdir не определена, потому что правильное имя было temp_dir...

set -u. Плюс:

$ cat foo.bash
#!/usr/bin/env bash
temp_dir=/foo/bar
echo "$temp_dir"
rm -rf $tempdir/*
$ shellcheck foo.bash

In foo.bash line 4:
rm -rf $tempdir/*
       ^-- SC2115: Use "${var:?}" to ensure this never expands to /* .
       ^-- SC2154: tempdir is referenced but not assigned (did you mean 'temp_dir'?).
       ^-- SC2086: Double quote to prevent globbing and word splitting.

Удобство сопровождения гораздо важнее. С которой у баша все очень и очень грустно.

Обоснуй.

shdown
()
Ответ на: комментарий от sin_a

Однажды мне захотелось узнать, является строка IP адресом или нет.

Заинтриговал, рассказывай подробности, раз уж начал

javaQest
()

[родина]

да, устарела

правда ли что python или perl содержат в себе все названное перед ними

да, только писать немасштабируемые однострочники на них неудобно.

Прошу аргументированно убедить что bash и sed достаточно со всем справляются

обломись

зачем может понадобиться python в админстве

потому что там 1) «one way to do it» и 2) рост программы не вызывает рвотного рефлекса

Спасибо.

не за что, страдай.

t184256 ★★★★★
()

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

daniilArch ★★
()

Perl, bash... Tcl же. И пайпы удобно писать, и логику тоже. И ООП найдется, если вдруг понадобится.

TeopeTuK ★★★★★
()
Ответ на: комментарий от Spoofing

много ли веб-программистов знают, как работает веб-сервер? много ли веб-программистов смогут написать простеньую реализацию на коленке, на листочке бумаги, для собеседования? чёт сомневаюсь. а это опять же, готовит об опыте веб-программиста.

LOL, а много ли программистов на асме знают физику полупроводников? А самое главное, как их сраные инструкции связаны с электрическими сигналами. Тоже значит, анскильные лалки, токо электронщики — тру инженеры.

Чтобы понимать как работает сервер, надо наооборот абстрагироваться от деталей его реализации, дабы не запутаться в 3 соснах.

javaQest
()
Ответ на: комментарий от javaQest

У питона есть модуль, который можно просто спросить: адрес это или нет, приватный или публичный и там что то ещё было.

sin_a ★★★★★
()

Почему же тогда всякое ipython никак не станет дефолтным шеллом в каких-нибудь дистрах?

Zaskar
() автор топика
Ответ на: комментарий от Zaskar

ман legacy, корпоративные заморочки

anonymous
()
Ответ на: комментарий от sin_a

Конечно можно ещё перевести адрес в 32 битное число и с ним уже иметь дело.

sin_a ★★★★★
()
Ответ на: комментарий от sin_a

У питона есть модуль, который можно просто спросить: адрес это или нет, приватный или публичный и там что то ещё было.

А у регекспа нельзя спросить? На каждый пук надо тащить монстров и засирать систему зависимостями?

javaQest
()
Ответ на: комментарий от zolden

Тащемта регэксп был в моём сообщении, но я его удалил, т.к. костыли.

is_ipaddr() {
    local byte='([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
    [[ $1 =~ ^$byte.$byte.$byte.$byte$ ]]
}
shdown
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.