UNIX 111: envsubst
UCR implementiert einen Template-Mechanismus: Er ersetzt Platzhalter in der Vorlage durch die konfigurierten Werte (oder führt passenden Python-Code aus).
echo '@%@hostname@%@' | ucr filter
In vielen anderen Situationen wird gerne sed
(oder ähnliches) genutzt, um Platzhalter in anderen Dateien zu ersetzten:
echo '@XXX@' | sed -e "s/@XXX@/$(hostname)/g"
Bei dieser Art der Ersetzung übersieht man gerne, dass man dort eigentlich die Werte passend escapen muss, denn ein /
würde hier den sed-Befehl ändern.
Eine Alternative ist envsubst
aus den gettext-base
, mit denen man über die Prozess-Umgebungsvariablen eine Ersetzung durchführen kann:
echo '${USER}' | envsubst
Normalerweise ersetzt envsubst
alle Referenzen auf Umgebungsvariablen.
Möchte man nur einige ersetzte, so kann man die zu ersetzenden Variablen auch explizit angeben:
printf '$A\n${B}\n' | env A=aaa B=bbb envsubst '$B'