LINUX.ORG.RU
решено ФорумAdmin

Как в ebuild файле заменить точки на дифисы?

 , ,


0

1

Мне нужно например заменить ${PV} который

0.31.1.17664948

на это

0-31-1-17664948

Я попробовал так

MY_PV="${PV/./-}"
MY_P="${PN}-linux64-${MY_PV}.zip"
SRC_URI="https://necessegame.com/content/server/${MY_PV}/${MY_P}"

Но получилось так, только одна точка поменялась

https://necessegame.com/content/server/0-31.1.17664948/necesse-server-linux64-0-31.1.17664948.zip

а нужно так

https://necessegame.com/content/server/0-31-1-17664948/necesse-server-linux64-0-31-1-17664948.zip


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

Нет, ты всё правильно сказал - в ебилдах используется bash. Просто одно время был тренд выноса функций в обертки - иногда это оправданно. В данном случае - функцию-обертку для замена разделителей версий убрали и предлагают использовать как раз bash-конструкцию //.

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

sed слинкован динамически, начал обновлять систему, sed разъехался, и всё, система неработоспособна

(это из личного опыта)

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

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

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

Холивор же начнётся…

Bash - просто ещё один язык программирования. «Язык программирования А дублирует функционал, а-ля язык программирования Б, создаёт новый подвид своих особенностей и ограничений» - так можно сказать про любые языки программирования. Так устроена вселенная. К чему это?

Kroz ★★★★★
()
Ответ на: комментарий от Kroz
  • Специализированный синтаксис под всё без разбора, то есть Perl-way, люди не любят и избегают.
  • Специализация шелла - запуск команд. Зачем избегать запуск команд для решения даже такой задачи (замена символов)?
  • Дублирование функционала - это как бы не KISS. Если можно оставить что-то одно без фанатизма, то почему бы и нет? Можно один раз основательно изучить awk/sed и всё, не надо заботиться о том, что есть ещё один синтаксис, который в чём-то похож, но во многом другой и надо читать ман и постоянно проверять свои догадки.
kaldeon
()
Последнее исправление: kaldeon (всего исправлений: 7)
Ответ на: комментарий от kaldeon

Дублирование функционала - это как бы не KISS. Если можно оставить что-то одно без фанатизма, то почему бы и нет? Можно один раз основательно изучить awk/sed и всё, не надо заботиться о том, что есть ещё один синтаксис, который в чём-то похож, но во многом другой и надо читать ман и постоянно проверять свои догадки.

В других языках ты тоже предпочитаешь варианты system() вместо нативных средств?

Специализация шелла - запуск команд

Интерактивного шелла, о котором тут речи не идёт.

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

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

Баш стоит ближе к абстракциям ОС (процессы, файловая система) и многие задачи в самом деле решает этими самыми средствами. Почему тогда в баше нет встроенной сортировки?

Шелл как язык похожий на привычные нам языки - это Перл. И Баш действительно в некоторых аспектах похож на Перл.

Специализация шелла - запуск команд

Интерактивного шелла, о котором тут речи не идёт.

Особой разницы нет. Команды запускаются и там и там.

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

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

В каких единицах измеряется расстояние до абстракций ОС? Каким образом раскрытие параметров в bash не вписывается в общий дизайн bash? А в POSIX shell?

Почему тогда в баше нет встроенной сортировки?

Можешь написать builtin. Как-то так получилось, что в штатной поставке отсутствует аналог sort.

Особой разницы нет. Команды запускаются и там и там.

Разница, разумеется, принципиальная, и шелл-скрипт ничем не отличается от любого другого скрипта, кроме мерзкого синтаксиса.

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

Научную единицу я показать не готов, но количество приседаний ради работы с процессами и всем вытекающим (файлы, потоки, pid, retval, env, etc.) на это указывает.

Раскрытие параметров не то чтобы противоречит общему дизайну шелла, а используется редко, излишне, выражается более простыми средствами или несёт только небольшую пользу. Есть шелл, в котором раскрытие параметров очень сильно ограничено (всего три вида, все для работы со списками): https://9p.io/sys/doc/rc.pdf

Поинт был скорее в том, что command substitution очень хорошо вписывается в шелл.

Можешь написать builtin

Был бы смысл.

Разница [между интерактивным и неинтерактивным режимами], разумеется, принципиальная

Принципиально она заключается в печати $PS1 перед чтением команды. Всё. Есть и другие отличия, но они ещё менее значимы. Шелл — это шелл, а не две разных программы. И упрощённый запуск программ является его отличительным свойством. В тех же скриптах почти все конструкции тесно интегрированы для работы с процессами (while true…).

шелл-скрипт ничем не отличается от любого другого скрипта

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

Ещё раз: поинт был в том, что шелл делает некоторые вещи особенно хорошо (command substitution, работа с процессами), а некоторые плохо. Я думаю, что лучше использовать его сильные стороны, а не брать понятия других языков, потому что они привычны и разницы якобы нет, даже если они реализованы через жопу (${var/old/new}).

Конструкция sed s/old/new/ имеет свои ограничения. Например, если old хранится в переменной. Но это уже ограничения самого шелла, которые принципиально решаются переходом на нормальный язык. ${var/$old/$new} частично решает проблему, но создаёт ряд новых ($old — это паттерн или строка? Конструкция "$old" допустима? Это вообще паттерн или регулярное выражение?). В качестве компромисса норм, но это иллюзия нормального языка. Проще принять ограничения шелла (запуск команд — ни больше, ни меньше), чем искать извращения, которые решают только половину проблем и в которых часть пользователей всё равно ошибается почти всегда, другая часть не знает, а третья один раз прочтёт ман и через месяц забудет.

kaldeon
()
Последнее исправление: kaldeon (всего исправлений: 9)
Ответ на: комментарий от anonymous

и шелл-скрипт ничем не отличается от любого другого скрипта, кроме мерзкого синтаксиса.

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

anc ★★★★★
()