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)

Напиши свой шелл со строками и форматированием.

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

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

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

tiinn ★★★★★
()

Я хочу хотя бы нормальное форматирование строки

В C (и плюсах) за 50 лет не осилили строковой тип нормальный, а ты от командного интерпретатора что-то хочешь.

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

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

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

pekmop1024 ★★★★★
()

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

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

В паверщели с этим всё в порядке. Линукс (не ядро, а система целиком) же просто от такого поломается необратимо.

shalom_ ★★
()

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

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

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

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

В C (и плюсах) за 50 лет не осилили строковой тип нормальный

Нет, это просто ты не осилил Си и видимо даже не понял его предназначение.

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

Но все твои аргументы полностью мимо

Ты скозал?

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

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

firkax ★★★★★
()

А чего ты хочешь? На них ещё деды писали. Не нравится? Бери Python.

th3m3 ★★★★★
()

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

xaizek ★★★★★
()

Вы абсолютно правы!

Рекомандациями не исользовать баш вообше ни для чего забиты вики/конфлюенсы всех более-менее серьезных компаний.

Перепечатывать аргументы оттуда смысла не вижу, их полно в интернете.

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

У тебя какой-то адовый usecase. Ты, наверно, и в Цэ не выделяя память в указатель фигачишь.

Shadow ★★★★★
()

Была большая тема, альтернатив не нашли

Ищу удобную альтернативу Bash

Скриптуха вообще говно, казалось бы, программы больше 10 строк на ней писать обычно и не надо, но взлетел именно примитивный python с отступами, что мешает его сразу использовать в этих всяких однострочниках. Для встраивания есть lua, а для всего остального bash, python и маргинальщина(но я бы рекомендовал perl, вдруг понравится), уеб не в счет.

Кстати, у @RazrFalcon последняя активность на github и reddit 21 и 23 февраля.

FedyaPryanichkov ★★
()
Последнее исправление: FedyaPryanichkov (всего исправлений: 3)

Есть шеллы, где таких «приколов» меньше, например zsh.

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

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

kmeaw ★★★
()

А зачем запускалке нескольких программ по списку все это нужно? Тем более, что python, lua, perl и ruby уже есть.

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

почему нельзя было заменить убогие портянки на что-то вменяемое уже «много лет» назад, чтобы не было этого «оно везде»?

почему нельзя? Вполне можно, меняйте. Например в s6-overlay все скрипты запуска написаны на execline, советую обратить внимание

Lrrr ★★★★★
()

почему нельзя было заменить убогие портянки на что-то вменяемое уже «много лет» назад, чтобы не было этого «оно везде»?

А на что заменять-то?

Ладно второй питон на третий заменять, что то тормозная жирная хрень, что это.

bodqhrohro_is_back
()

Было же давнее интервью Торвальдса где он рассказывал, что это происки жидорептилоидов для замедления прогресса

https://youtu.be/dQw4w9WgXcQ

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

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

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

О, говноеды подтянулись.

Virtuos86 ★★★★★
()

Разнылся, дали питон, он везде тоже есть считай.

Gary ★★★★★
()

А кто запрещает скрипуху писать на перле/пистоне ?

И тот и другой входит в базовую поставку любого линуха.

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

Ну «неосилятор» - это хороший детектор говноеда. Если в тексте присутствует это определение - то его автор определённо говноед.

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

Насильно пользоваться Bash-ом программеров вроде никто насильно не заставляет ) Поэтому суть претензий к типа «оно везде» непонятна ))
Судя по начальному посту топик-стартера также должны ну просто жутко раздражать все программы, которые принимают в качестве одного аргумента строку с внутренними пробелами, а также все макропроцессоры, поскольку они же, блин, берут да и подставляют что-угодно в командную строку или в строку программного кода!

По конкретным хотелкам:

Об отсутствии нормальных итераторов и массивов …

https://www.gnu.org/software/bash/manual/bash.html#Arrays

Я хочу хотя бы нормальное форматирование строки …

https://www.gnu.org/software/bash/manual/bash.html#index-printf
echo «бла бла бла ${var1} бла бла бла ${var2}»

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

vinvlad ★★
()

Просто python - programming language, а шел - нет. И никогда не был. И не задумывался как таковой. Shell scripting - способ автоматизации последовательного выполнения команд, на нем программы не пишут. Ферштейн?

А вот писать автоматизацию последовательного выполнения програм на python - моветон и признак тупости. К сожалению с каждым годом все чаще вижу такое, где вместо ls | grep -E '.mp3$' | sed 's/mp3/ogg/' пишут сумашедшие портянки на питоне…

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

Shell scripting - способ автоматизации последовательного выполнения команд

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

А вот писать автоматизацию последовательного выполнения програм на python - моветон и признак тупости.

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

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

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

А что вас не устраивает? Вполне очевидный код при знании Bash-а. Или вы думаете, что на каком-нибудь другом языке все было бы в две строки? ))

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

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

Писать на перле надо если хочешь чтобы потом никто кроме тебя не смог это поддерживать. А так лучше уж на шелле.

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

… вот еще полезная книжка:
https://tldp.org/LDP/abs/html/index.html

Здесь куча всяких примеров. Начинать наверное лучше с нее. Вместе со справочником это достаточный комплект чтива для познания всех сложностей и извращений Bash-а )

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

Выглядит прикольно.

Сам пользовался?

Как вообще с этим шеллом жить, если есть необходимость bash-скрипты писать?

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

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

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

Сам пользовался?

Только тыкаю время от времени (впечатления в основном положительные), пока больше слежу за развитием. В последней версии они наконец-то переписали движок, что дало кучу плюшек, плюс сгладили всякие неровности в языке и встроенных командах. Но в свете того, что оно плавно движется к релизу 1.0, планирую в скором времени затестить как дефолтный shell дома.

Как вообще с этим шеллом жить, если есть необходимость bash-скрипты писать?

А как тебе оно будет мешать bash-скрипты?

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

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

А какое предназначение у C, и почему сишные программисты пишут код с UB? И как так получилось, что @Stanson наложил мимо буфера?

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

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

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

Да-да на шелле, конечно, намного понятнее

Чем на перле - однозначно. Но конечно тоже не идеал, я против программирования на шелле.

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

Си сам по себе это набор синтаксических конструкций для побайтовой манипуляции данными и передачей управления между адресами в оперативной памяти (например, объявление функции - это задание имени для адреса в памяти, где располагается её код, и указание соглашения по передаче аргументов перед CALL-ом на этот адрес).

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

Те его части, которые не привязаны к железу и полностью кроссплатформенны - не UB, ну а те, что зависят от конкретной системы и/или флагов компиляции - UB. Далеко не всем нужна полная кроссплатформенность, поэтому пишут с UB.

И как так получилось, что Stanson

Ну это не ко мне вопрос.

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

… как рыцарь без страха и упрека защищаете говношелл, бгг.

Bash не требует чьей-то защиты ) Я просто банально помог человеку решить его проблему - и, как не трудно заметить, вполне успешно.

Вам же, abcq, советую лечить психику ) У вас восприятие текста - на участке начиная от зрительного аппарата и до поступления непосредственно в сознание - очень сильно искажается какими-то эмоциональными помехами. В результате ваш мозг работает по принципу «смотрю в книгу - вижу фигу» )

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

Си сам по себе это набор синтаксических конструкций для побайтовой манипуляции данными и передачей управления между адресами в оперативной памяти (например, объявление функции - это задание имени для адреса в памяти, где располагается её код, и указание соглашения по передаче аргументов перед CALL-ом на этот адрес).

Так это любой ЯП! Но вообще, нет. Или ты уже забыл тот эпичный тред, в котором для многих ВНЕЗАПНО выяснилось, что C – нихрена не низкоуровневый язык? И что в стандарте описана целая абстрактная машина для этого языка?

В стандарт C предложено внести лямбды и defer из golang

Я до сих пор горд тем вбросом :D

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

Я до сих пор горд тем вбросом :D

Как же такое забыть, нет не забыл, но и там то же самое писал.

Абстрактная машина это формальное описание той части языка, которая кросс-платформенна и везде одинакова. Но Си ей не ограничивается, просто всё остальное (зависящее от платформы и от настроек компилятора) им было лень расписывать и они налепили туда ярлык «UB», типа кто не знает что это просто не лезьте а кто знает - сами разберётесь как-нить (ну и правда, ведь иначе пришлось бы в описание языка включать спецификации всевозможного железа например).

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

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