shell   UCS

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'
Written on March 10, 2020