Comments 12
всегда sed хватало...
Пример неудачный: написание результата кажется проще чем комбинация шаблона и данных
кажется Вы изобрели envsubst.
upd: дочитал...
идея
tool -data data.yaml template.tpl
- очень хорошая, я тоже об этом думал.идея пробросить туда ENV тоже весьма
а вот собственный язык шаблонов здесь всё портит (конечно это моё мнение).
мне кажется что очень хорошим вариантом шаблонного языка является какой-нибудь язык-embedded.
Например perl-embedded (что-то вроде Mojo)
JS-embedded (масса вариаций вроде ejs)
конечно же PurePHP :)
так далее.
Что хорошо в embedded языках, так это то,
что шаблоны сложнее hello world тоже доступны и сложная логика на них реализуема.
что не требуется учить язык чтоб их использовать
и главное: оно легко расширяемо (какую-нибудь библиотеку форматирования даты времени очень просто подключить в такие шаблоны)
а вот собственный язык шаблонов здесь всё портит (конечно это моё мнение).
Тут реализовано подмножество популярного mustache.
мне кажется что очень хорошим вариантом шаблонного языка является какой-нибудь язык-embedded.
Бывает полезно, но из пушки по воробьям в данном случае.
Но поиграться с тем же Lua мне было бы интересно, спасибо за идею
Плюсую Lua. Пробовал работать с разными встраиваемыми языками и Lua оказался самым беспроблемным. Если нравится синтаксис Python, то можно Starlark ещё посмотреть.
для Lua подобный шаблонизатор сделан в тарантул http
https://github.com/tarantool/http/blob/master/http/tpleval.h
Всё уже придумано до нас. ;-)
export VAR1="bla-bla-bla" VAR2="blablabla" VAR3="blabla-bla"
envsubst < file_with.vars|tee file_with.vars >/dev/null
И вот как-то так оно и работает
Если кому нужна подсвечивалка по регуляркам, ловите, мне не жалко. ;-)
#!/usr/bin/env bash
#
# hlt approved by shellcheck ;-)
#
hl_start="\\\e[0;1;4;32m"
hl_end="\\\e[0m"
usage() {
cat << 'EOF'
hlt: 'sed -E' regular expression highlighter from file or stdin.
Usage:
hlt '<regular expression>' <file>
or command | hlt '<regular expression>'
EOF
exit 1
}
if [[ -z "$1" ]]; then
usage
fi
if [[ -n "$2" ]]; then
file="$2"
else
file="/dev/stdin"
fi
result="$(sed -E "s/(""$1"")/$hl_start\1$hl_end/g" "$file")"
echo -e "$result"
exit 0
А главное практически всегда есть в системе. И да. это реально самый простой шаблонизатор. Но творение автора тоже может быть применимо в определённых кейсах.
PS: Такое чуйство, что автор раньше писал статьи для Журнал Хакер ;-)
Однажды я был маленьким, и задавался вопросом — вот если Unix way это (упрощенно) небольшие, довольно простые утилиты и библиотеки, которые делают одну вещь, но делают её хорошо (Peter H. Salus: "...that do one thing and do it well"), то… Где тогда утилита, которая занимается шаблонизацией и не хватает звёзд с неба?
GNU m4
Статическая линковка — один бинарный файл без каких-либо зависимостей (он мне понадобится в docker scratch)
Итоговый размер должен быть минимально возможным (постараться уместиться в 100Кб без upx)
Есть mustache шаблонизатор на bash
github.com/tests-always-included/mo
32 KB
Если вырезать комментарии, то выйдет наверное вполовину меньше.
Шаблонизация в CLI может быть простой