LINUX.ORG.RU
ФорумTalks

Про обратную совместимость, распространённость и прочее

 , ,


0

0

Я вот смотрю на убогость шелловых языков. Что sh/bash, что виндовый bat. У них нет вменяемой обработки ошибок по дефолту, эти скрипты несамостоятельны. bash/sh пытаются казаться таковыми, ведь в них есть функции, но вся эта псевдосерьёзность сходит на нет при подобных примерах:

foo = 'test   test1  test2'
echo $foo
# test test1 test2
echo "$foo"
# test   test1   test2

«НАДА БЫЛА УЧИТЬ ШЕЛЛ, ИТА ЖИ РАЗНЫЕ ВЕЩИ!!111». Но почему, если взять другую скриптуху (вроде питона), то таких приколов с выводом текста в ней нет?

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

Об отсутствии нормальных итераторов и массивов и говорить не приходится. «Зойчем нам массивы и итераторы, это же оверхед!!!11». А толку от такой скриптухи тогда?

«Но ведь оно везде, уже много лет, совместимость, пиши шелл-портянки, сидр».

Собственно, основной вопрос сводится к этому: почему нельзя было заменить убогие портянки на что-то вменяемое уже «много лет» назад, чтобы не было этого «оно везде»? Я хочу хотя бы нормальное форматирование строки. Я что, многого прошу?



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

Шелловый язык, скажем так, на один раз. Ну, типо, подглядел в сети, выполнил нужную задачу - и благополучно забыл. Для долгосрочных рабочих скриптов существует, например, perl. По крайней мере, уж его обратной совместимостью перешибить будет непросто.

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

Почему эта автоматизация делает больно?

Только тупым, любой адекватный человек знает что и зачем он делает…

А такие, или такие портянки - признак сверхразума?

А что не так, кроме того что оно совсем не автоматизация, а вполне себе полноценная программа? Очевидно же что сделано на шел по вполне понятным причинам - минимизировать количество системных зависимостей при инсталяции… Компилированные бинари не очень-то и портабельный путь…

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

Иди рот помой, а то у тебя он в чём-то коричневом

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

Ъ-админы плюются с питона

я тру олд скул админ и активно писал на python. а вот плююсь с тех, кто плюется на шел. потому что шел критиковать было модно 20 лет назад. в свое время не было альтернатив, а сейчас он такой для совместимости и это прекрасно (вспомни, сколько поломаных скриптов при переходе с python2->python3). если ты bash типа не знаешь, ну эт твои проблемы: ты не Ъ.

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

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

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

его и сейчас неомодно критиковать его можно было начинать критиковать с его рождения

потому что шел критиковать было модно 20 лет назад.

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

Синтаксис - да, непривычный ... особливо для программеров.

Не заметил такой проблемы когда изучал баш. Возможно для кодеров это проблема, но кодеры они особые существа :) с руками заточенными под конкретный ЯП.

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

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

Пролистал наискосок, напишите менее многословно на вашем любимом ЯП.

anc ★★★★★
()

напиши такое же на винфаке про cmd, пожалуйста

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

Кстати не припомню лютой критики 20 лет назад. Я про критику ради критики, а не про обсуждение конструктивных недостатков по делу.

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

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

abcq ★★
()

Это всего лишь клей для внешних программ.

Спасибо, кэп.

Но даже с этим шелл-портянки справляются плохо.

А что справляется лучше? Можно на это посмотреть? А то элементарный конвейер на ЯП общего назначения обычно выглядит как BDSM упражнения.

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

ложкой копать котлован, но удобства мало,

Карьерным экскаватором тоже не удобно землю в цветочный горшок накладывать.
В целом, ничем не подкреплённый вброс «шел плохой, потому что плохой»
ЗЫ «Сначала добейся» предложите решение по возможностям и скорости сопоставимое с sed на любом ЯП и желательно не на сотню строк.

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

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

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

без утилит из кор утилс

В таком изложении и спорить не о чем. Шел выполняет ровно те функции которые должен выполнять и никто не предлагает написать на нём doom2022 с шахматами и шахматистками.

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

и тем не менее пишут, расширяя утилитками, не дум конечно, но склеить соплями шелла + утилитки какие-нибудь nginx + bind + docker и получить из этого так называемый lancache это запросто и это еще довольно безобидный вариант, потому что там не так много баш соплей понадобилось, а ведь можно на нем написать например биллинг для провайдера или еще какую-нибудь утилитарную систему, чего нет то, и пишут, продолжают писать все подряд, в общем, если можно использовать что-то другое, лучше использовать что-то другое, это моя позиция, а так пусть каждый как хочет развлекается.

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

Тут такое дело, «некрасиво получилось» можно сделать на любом инструменте. Я посмею предположить, что вы согласны с тем, что шуруп забитый молотком держится лучше гвоздя завернутого отверткой.
Есть у меня несколько примеров баш лапши, кровавые слезы наворачиваются от одного взгляда, минимум один баг нашелся по прошествии многих лет, но и писал это совсем не программист.

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

На перле можно написать такой же читаемый код, как и на Си/питоне, если не пытаться втиснуть всё в 10 строк кода. И вообще, уважайте старика перла

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

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

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

собственно его и поменять то особо никто не стремится

Только менятелей шеллу не хватало. Хотя не, одни уже нашлись - сделали баш. Но на нём никто кроме нубов не пишет.

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

Да мне то в принципе плевать на шелл как таковой, лишь бы на нем не писали программы, скрипты в 50-100 строк ради бога, ну и как пример выше когда собирают разное ПО и склеивают его шелл соплями тоже такое видеть забавно особенно когда этому дают какое-нибудь броское имя и выдают за самостоятельный продукт.

abcq ★★
()

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

если не проверять код возврата, то в любом языке программа выполнится, нет?

sergej ★★★★★
()

виндовый bat

С разморозкой, бро

В винде уже давно powershell, в котором всё что нужно. Особенный каеф — объектный пайп, а не вот этот cut-sed-bdsm-tr.

В онтопик вроде тоже завезли, но пока не пробовал

cmd и bash — дедовского страдания путь, «мы в 90-е нормально выживали, и вы выживайте»

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

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

В павершеле можно глобально задать $ErrorActionPreference=«Stop»

В Bash есть аналогичная директива: set -e.
Просто почти все критиканы Bash-а даже и не пытались его как-то почитать-освоить - добрались до первых квадратных скобочек и обломились ))

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

… дело вообще не в программисте и его квалификации, а в том что шелл как яп очень и очень плох

Дело вовсе не в этом… )
Дело в том, что есть общее понятие «язык» и есть более частные понятия «язык программирования», «язык Shell», «макроязык» и т.п. И мешать и сравнивать эти понятия - это абсолютный бред. Такое может прийти в голову только людям с очень сильной профессиональной деформацией сознания - когда весь мир видится и воспринимается только в системе понятий своего «маленького огородика». Вот видит такое деформированное сознание фразу «язык Shell» и воспринимает оно эту фразу исключительно как синоним «ЯП» ) - и начинают бурлить в этом деформированном сознании процессы когнитивного диссонанса… )) Только и всего.

А что хорошо или плохо в каком качестве - это всё зависит от вполне конкретных обстоятельств. Для общих утверждений и предпочтений всегда есть исключения. Полное игнорирование такой простой истины - это тоже следствие узкопрофессиональной деформации сознания.

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

Все тоже самое можно написать про применение любого инструмента там где его можно было бы не применять. И ещё раз - шел не ЯП.

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

ну так вон выше вас тоже скатившийся до личных оскорблений человек, который тоже уверяет что шелл не яп. Но так какого черта на нем пишут автоматизацию, а то и вообще ПО которое дергает кучу другого ПО с совершенно не унифицированными интерфейсами взаимодействия и все это через текст как транспорт, особенно меня порадовало set -e как метод обработки ошибок, и потока исполнения. Смысл оправдывать убогий недоязык выискивая ему нишу или искусственно ее поддерживая продолжая на нем писать мне непонятен, зато я прекрасно понимаю что это историческая кабала которая и обеспечивает ему нишу, от которой так просто не отделаться, но видимо второе понимают далеко не все или нарочно не хотят понимать, тут уж кому как удобней.

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

пишут, продолжают писать все подряд

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

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

Понял. Вы из партии любителей написания своих велосипедов по поводу и без и клепания из этих велосипедов комбайнов.

а то и вообще ПО которое дергает кучу другого ПО

Именно. Но вы забыли маленькое уточнение, где другое ПО умеет делать фичу и делать её хорошо.

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

Ну да, к 200-летней годовщине Великой Октябрьской Социалистической Революции планирую завершить портирование.

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

Достойное начинание! Успехов! Опять-таки если асм к тому моменту будет всё ещё актуален, трудоустройство на высокооплачиваемую работу гарантировано.

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

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

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

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

Именно. Но вы забыли маленькое уточнение, где другое ПО умеет делать фичу и делать её хорошо.

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

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

любой современный скрипторой язык может без проблем заменить весь корутилс и остальные программы хелперы по функционалу

Ну вот про это я и написал выше. Даешь велосипедов больше и разных.

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

Ну вы не можете отрицать хотя бы того факта что такого рода замена несет улучшения как для написания так и для поддержки кода. Развивался бы шелл как и его возможность скриптовать + отделение одного от другого, а не попытка натянуть яп на шелл, тогда бы и нужды не было говорить обо всем этом. Ворох утилит и недоязык на котором не то что велосипеды пишут, но еще и с квадратными колесами это тоже так-то не предел мечтаний.

Кстати буквально парой сообщений ранее вы иронизировали на предмет асма, а теперь говорите о шеллосипедах, так надо на асме все было писать и дальше, зачем этот шеллосипед.

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

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

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

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

а запихивать sed везде даже если он не нужен в принципе это значит выход? Я то как раз предлагаю запихивать только то, что нужно в отличии от…

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

а запихивать sed везде даже если он не нужен в принципе это значит выход?

Где я написал про запихивание чего-либо если оно не используется?

Я то как раз предлагаю запихивать только то, что нужно в отличии от…

Вообще не понял.

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

Где я написал про запихивание чего-либо если оно не используется?

Тут предложили, сами того даже не поняв. Что и видно следующим комментарием.

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

любой современный язык из коробки умеет во ввод/вывод и работу с подстроками, как и регулярки, так что впихнув такой язык в шелл вы сразу избавитесь от нужды во всем ворохе утилит помогаторов, не говоря уже о том что с 10 раз уже написано ранее, что там есть менеджмент расширений и все единообразно от интерфейсов, до механизма биндингов к С коду. В противовес этому, шелл не умеет сам по себе почти ничего, подумайте сколько надо будет на шелле написать чтобы отказаться от sed и изобразить его на средствах шелла если вообще получится + скорость выполнения этого рака отшелльника. По этой то причине вы всегда и получаете в нагрузку к бесполезному как яп шеллу еще и набор утилит чемоданом. И все это гордо именуется юниксвеем одна задача один иструмент, а по факту тем же авком в ряде случаем можно заменить тот же сед, так одна задача один инструмент или же нет? Тут и протекает вся эта идеология, но главное что всеми этими идеологиями защищают никуда не годный как яп шелл.

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

любой современный язык из коробки умеет во ввод/вывод и работу с подстроками, как и регулярки

Ну да, конечно...

шелл не умеет сам по себе почти ничего, подумайте сколько надо будет на шелле написать чтобы отказаться от sed

Заканчивайте с веществами. Несколько раз уже написали, что шел не яп.

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

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

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

То что кто-то использует инструмент не по назначению, не делает инструмент плохим. Вы следуете логике: вот на сишечке я могу написать for(int i=0;i<10;i++), а на асме это займет несколько строк значит асм негодный.

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

ну вот вы и скатились … до отрицания того что шелл используют как яп (хотя уже тоже было 10 раз сказано что именно в этом и его проблема, он и не яп и в тоже время его юзают как яп на кой то хрен, и даже не думают улучшать), …

Bash (вместе c coreutils) используют только при решении тех задачек, где такое использование более адекватно и оптимально, чем использование скрипт-языков общего назначения. К примеру, код в разы короче и нагляднее получается. Ну и юзеров всё устраивает. И в чем проблема? - в том, что на «недоязыке» иногда проще и удобнее что-то сделать? И зачем его еще улучшать, если он и так хорош для своей области применения?

По вашей логике вcе entrypoint-скрипты и Dockerfile-ы, которые на Docker Hub лежат, нужно на Lua перевести?

P.S. Кстати, я вас нисколько не оскорбляю - я просто пытаюсь вам объяснить, что иногда полезнее и правильнее расширить свой набор понятий для познания окружающей действительности, чем пытаться запихивать эту действительность в имеющийся набор представлений и понятий и злобиться на то, что не запихивается.

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

Ну и про set -e правильно тоже. Но trap ERR позволяет ещё и код обработчика выполнить при ошибке.

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

Дело в том, что есть общее понятие «язык» и есть более частные понятия «язык программирования», «язык Shell», «макроязык» и т.п. И мешать и сравнивать эти понятия - это абсолютный бред

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

theNamelessOne ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.