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)

Ответ на: комментарий от vinvlad

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

НЕТ - не обязательно. Вы заблуждаетесь:

MYRANDOM="$( head -c 100 /dev/urandom | sha256sum -b | head -c 20 )"

и где здесь не текстовый пайп. Ну вы просто лол конечно…

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

А [[ … ]] — это такой же синтаксический сахар, как и [ … ] ?

Ну, в общем-то да - просто встроенная команда другая.

Не, это вообще другое. На этот вопрос я как раз знал ответ.

Для сравнения

man [
man [[

И да, два стула: либо функциональность, либо совместимость.

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

НЕТ - не обязательно.

Ок, но вывод тот же: на практике это почти не применяется. Передать немного энтропии в криптотулзу или чего-то поделать с медиапотоками — это, по-моему, всё. Передавать данные об объектах (файлах, пользователях, событиях и пр.) никак не помогает.

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

Ну понимаете в чем между нами разница, я не привожу какие-то куски явно проблемной лапши, …

Ну, я лапшу пишу не только на Bash-е ) - писал и на Ассемблере IBM 360/370, Pascal, 4GL-языки, SQL, Си, С++, C#, Java, PHP, Javascript. В общем, я знатный лапшеписатель ))))))))

Да мне, в общем-то, пофигу на чем писать…

Я просто вижу, что разговариваю с каким-то ребёнком - поэтому вы меня ничем не заденете )

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

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

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

Не, это вообще другое. На этот вопрос я как раз знал ответ.

Значит плохо знали - это просто дополнительный командный модуль со своим внутренним синтаксисом:

https://unix.stackexchange.com/questions/306111/what-is-the-difference-between-the-bash-operators-vs-vs-vs

но вывод тот же: на практике это почти не применяется.

Так про все можно сказать )))))))))

Всё - ликбез окончен )

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

… нахрен мне эта информация если мы вообще говорим за убогий шелл

Угомонитесь - вы обычный, эмоционально не очень уравновешенный тролль ) Ну или перетрудились чутка … Отдохните, пивка попейте - может отпустит )

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

Значит плохо знали - это просто дополнительный командный модуль со своим внутренним синтаксисом

Угу, да.

Прежде чем перейдём по ссылке, ответьте себе, что вы называете «командным модулем»? В posh понятно — это кусок с командлетами, который можно загрузить через Import-Module. А что это в баше? Бинарь, лежащий в $PATH?

Ладно, переходим по вашей ссылке:

if [[ condition ]]

This is a new upgraded variation on test¹

¹ though not really a command but a special shell construct with its own separate syntax from that of normal command, and varying significantly between shell implementations

Вы всё ещё утверждаете, что ну, в общем-то да, то же самое, что и [ … ] ?

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

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

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

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

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

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

А еще если учесть что идея пайпов вообще как бы появилась как IPC подсистема ОС. И то что шелл по сути на ней паразитирует.

Паразитирует не шел, а использующие его человеки.

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

На каждый жизненный случай предлагается дёргать стороннюю прогу с самобытными принципами работы.

Вы про сочетание букавок KISS не слышали?

пайп.

То что большое кол-во людей не осилило < не означает, что < нет.

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

Мой ответ: Ну, в общем-то да - просто встроенная команда другая.

Ваша интерпретация: Вы всё ещё утверждаете, что ну, в общем-то да, то же самое, что и [ … ] ?

Ну вы что в самом деле? Правильно прочитать не можете? Или всех за дебилов считаете? )

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

Просто я посчитал, что вам хватит сообразиловки самому понять, что синтаксис и семантика содержимого внутри [[…]] должна быть другой. Иначе зачем добавляли эту конструкцию??? Видимо я слишком хорошо о вас подумал )

Ну и прочитать доку могли бы и самостоятельно. Чего приставали-то с глупыми вопросами? Совсем обленились?

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

Короче, ответа на вопрос «зачем всё это» у вас нет.

С учётом наметившегося вырождения беседы в базарно-трамвайный срач — до свидания.

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

KISS обязует строить велосипеды?

Почему некоторые проги забивают на общепринятые правила?

Почему find -name не эквивалентен find -n -a -m -e ?

Почему нельзя хотя бы внутри GNU договориться о стандартах?

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

Короче, ответа на вопрос «зачем всё это» у вас нет.

А вы хотели, чтобы я вам тут подробную лекцию по Bash-у бесплатно прочитал?)
Ссылки на книжки по Bash посмотрите выше в теме - я топик-стартеру оставлял.
Бывайте

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

KISS обязует строить велосипеды?

Нет. Про велосипеды это как раз к шиндоус.

Почему find -name не эквивалентен find -n -a -m -e ?

алфавит не резиновый

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

Спасибо за мнение, конечно, но я умею скрипты в обоих.

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

ну это как посмотреть, его так задизайнили что он умеет связываться только через вывод одних программ с другими либо через перенаправление ввода/вывода открытых по умолчанию stdin stdout stderror и остальных файловых дескрипторов которые вы откроете, либо через пайпы. Все таки самодостаточные языки хоть так же юзают эти части ОС, но они так жестко на них не завязаны и не строят свое существование только вокруг условного «текстового пайпа».

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

Ну пайп не обязательно текстовый …

Обязательно. Да, текст может быть структурированным (в XML, JSON или что-то ещё), но … на практике это почти не применяется.

Не для открытия новой дискуссии, а так… вдогонку:

В Bash двоичные данные нельзя хранить и в переменных - только текст. Так что, здесь нет какого-то разрыва логичности - есть просто четкое ограничение.

В плане «живучести» Bash: утилита «jq» позволяет выдернуть из JSON все что угодно, чем те, кому это надо, и пользуются в «верхней» Bash-логике. Ну а если для мэйнстрима освоение «jq» - это тяжкая, непосильная проблема, то это их проблема. Во времена придумывания Unix и Bourne shell в IT и в программировании тон задавали немного другие люди.

«Гениальная» (в кавычках) идея дополнить пайп всякими дополнительными объектами, как это сделано в PowerShell - это как раз яркое проявление полного отсутствия чувства меры. Из-за таких «мыслителей» ента самая OS и заканчивает свое существование.

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

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

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

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

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

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

Пойди сделай мне на баше мелкую автоматизацию внешнего сервиса по REST API, с обработкой выхлопа в json и http кодов.

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

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

почему в убогом шелле так много этих убогих конструкций под каждый чих

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

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

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

А какое это все имеет отношение к login-шеллу? )))
Пишите, на чем нравится ) Вас, как раз, никто ни к чему не принуждает. Тут обратная ситуация…

Пойди сделай мне на баше мелкую автоматизацию внешнего сервиса по REST API, с обработкой выхлопа в json и http кодов.

Ну у меня в k8s-кластере обновление сертификатов Let’s Encrypt крутится на баше + curl + jq + еще пара-тройка утилит - весь код в Secret-объекте лежит. И чо… ?
Так что не надо пафоса ) Кому что больше подходит исходя из конкретных потребностей…

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

Пойди сделай мне на баше мелкую автоматизацию внешнего сервиса по REST API, с обработкой выхлопа в json и http кодов.

Синкал джиру с гитлабом. Курл и жку прекрасно работали. Разобрать протокол общения этого говна было сложнее чем накодить 2 скрипта.

Понятия не имею что за конфиги днсмаска, но не думаю, что на 95% задач у питона будет хоть какое-то преимущество кароме неинтуитивного синтаксиса баша.

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

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

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

А вы зачем сюда слово «текстовый» принесли? И что бы два раза не вставать, чем будет отличаться текстовый от бинарного?

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

Вы забыли на что отвечали что ли? Речь шла о текстовом пайпе как межпроцессном взаимодействии в шелле, и что он на нем завязан.

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

А чтобы в два раза не вставать не стоило и начинать, а теперь не уводите тему разговора, по факту вам возразить нечем.

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

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

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

это самый что ни на есть текстовый пайп

cat /bin/cat >~/new-cat
diff -s /bin/cat /home/anc/new-cat
Files /bin/cat and /home/anc/new-cat are identical
anc ★★★★★
()
Ответ на: комментарий от anc

Не-не-не... Чтоб у него окончательно башню сорвало надо было так:

cat </bin/cat | cat >~/new-cat

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

внутренней реализации в принципе плевать, там бинарное представление, да и все есть текст, тут все подряд, опять же cat не shell попробуйте проделать это с echo и он уже не сможет, и sed да много чего не сможет, но главное что сам shell не умеет, а значит от ну такое…

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

попробуйте проделать это с echo и он уже не сможет

Не сможет чего?

но главное что сам shell не умеет

Вы из общества поклонников Лёни?

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

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

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

ну так по факту же получается что шелл говно которое ничего не может, чтд.

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

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

Ъ админы вполне себе ansible юзают, который полностью питоновский. ИМХО чисто шелл скрипты имеет смымсл писать только в двух случаях

  1. это 3 строчки кода и нее имеет смысл запусать жирный питон для этого
  2. это должно быть что-то супер портированное, так как у шелла с этим все ок, а у питона нет. До сих пор есть всякие дремучие дистры, где второй питон вместо третьего(а они не совместимы) или питона нет вообще

В остальном ты можешь плевать на мнение Ъ админа, который плюется

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

foo = ‘test test1 test2’

не «скомпилится»

Пойди сделай мне на баше мелкую автоматизацию внешнего сервиса по REST API, с обработкой выхлопа в json и http кодов.

На C++ или Assembler’e… Ага. Язык основная задача которого создавать цепочки команд, передающих выхлоп друг другу, где нет иных типов данных кроме строк (и массивов строк), глупо обвинять в том для чего он не предназначен совсем как минимум, потому что нет таких типов как ассоциативный масстив aka словать, aka object, число с плавающей запятой и булев

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

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

pekmop1024 ★★★★★
()

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

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