Інших інструментів, крім них /bin/sh
. Дано файл шаблону форми
Version: ${version}
Path: ${path}
або навіть із змішаним кодом оболонки
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)
і файл конфігурації, аналогічний оболонці, як
version="1.2.3-r42"
path="/some/place/under/the/rainbow/where/files/dance/in/happiness"
cost="42"
розширити це на просту справу
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
Дійсно, враховуючи шлях до файлу конфігурації в змінній оболонки config_file
та шлях до файлу шаблону template_file
, все, що вам потрібно зробити:
. ${config_file}
template="$(cat ${template_file})"
eval "echo \"${template}\""
Це, можливо, красивіше, ніж мати повний скрипт оболонки як файл шаблону (рішення @ mtinberg).
Повна програма наївного розширювача шаблонів:
#!/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
Це виведе розширення на стандартний вихід; просто перенаправляйте стандартний вихід на файл або модифікуйте вище описане очевидно, щоб отримати бажаний вихідний файл.
Застереження: Розширення файлу шаблону не працюватиме, якби файл містив подвійні подвійні лапки ( "
). З міркувань безпеки ми, ймовірно, повинні включати кілька очевидних перевірок правильності або, що ще краще, виконувати трансформацію уникнення оболонки, якщо файл шаблону генерується зовнішнім об'єктом.