Kein Werkzeug außer /bin/sh
. Gegeben eine Vorlagendatei des Formulars
Version: ${version}
Path: ${path}
oder sogar mit gemischtem Shell-Code
Version: ${version}
Path: ${path}
Cost: ${cost}\$
$(i=1; for w in one two three four; do echo Param${i}: ${w}; i=$(expr $i + 1); done)
und eine Shell-analysierbare Konfigurationsdatei wie
version="1.2.3-r42"
path="/some/place/under/the/rainbow/where/files/dance/in/happiness"
cost="42"
es ist eine einfache Sache, dies zu erweitern
Version: 1.2.3-r42
Path: /some/place/under/the/rainbow/where/files/dance/in/happiness
Cost: 42$
Param1: one
Param2: two
Param3: three
Param4: four
In der Tat müssen Sie angesichts des Pfads zur Konfigurationsdatei in der Shell-Variablen config_file
und des Pfads zur Vorlagendatei in template_file
nur Folgendes tun:
. ${config_file}
template="$(cat ${template_file})"
eval "echo \"${template}\""
Dies ist vielleicht hübscher als ein vollständiges Shell-Skript als Vorlagendatei (@ mtinbergs Lösung).
Das vollständige naive Template-Expander-Programm:
#!/bin/sh
PROG=$(basename $0)
usage()
{
echo "${PROG} <template-file> [ <config-file> ]"
}
expand()
{
local template="$(cat $1)"
eval "echo \"${template}\""
}
case $# in
1) expand "$1";;
2) . "$2"; expand "$1";;
*) usage; exit 0;;
esac
Dadurch wird die Erweiterung auf die Standardausgabe zurückgesetzt. leiten Sie die Standardausgabe einfach in eine Datei um, oder ändern Sie die obigen Einstellungen auf offensichtliche Weise, um die gewünschte Ausgabedatei zu erstellen.
Vorsichtsmaßnahmen: Die Erweiterung der Vorlagendatei funktioniert nicht, wenn die Datei Anführungszeichen enthält ( "
). Aus Sicherheitsgründen sollten wir wahrscheinlich einige offensichtliche Sicherheitsüberprüfungen einbeziehen oder, noch besser, eine Shell-Escape-Transformation durchführen, wenn die Vorlagendatei von einer externen Entität generiert wird.