Piszę skrypt, który zautomatyzuje tworzenie plików konfiguracyjnych dla Apache i PHP dla mojego własnego serwera WWW. Nie chcę używać żadnych GUI, takich jak CPanel czy ISPConfig.
Mam kilka szablonów plików konfiguracyjnych Apache i PHP. Skrypt Bash musi czytać szablony, dokonywać podstawiania zmiennych i umieszczać przeanalizowane szablony w jakimś folderze. Jaki jest najlepszy sposób, aby to zrobić? Mogę wymyślić kilka sposobów. Który z nich jest najlepszy, czy może są na to lepsze sposoby? Chcę to zrobić w czystym Bashu (na przykład w PHP jest to łatwe)
1) Jak zamienić symbole zastępcze $ {} w pliku tekstowym?
template.txt:
the number is ${i}
the word is ${word}
script.sh:
#!/bin/sh
#set variables
i=1
word="dog"
#read in template one line at the time, and replace variables
#(more natural (and efficient) way, thanks to Jonathan Leffler)
while read line
do
eval echo "$line"
done < "./template.txt"
BTW, jak przekierować tutaj wyjście do pliku zewnętrznego? Czy muszę uciec przed czymś, jeśli zmienne zawierają, powiedzmy, cudzysłowy?
2) Użycie cat & sed do zastąpienia każdej zmiennej jej wartością:
Podany plik template.txt:
The number is ${i}
The word is ${word}
Komenda:
cat template.txt | sed -e "s/\${i}/1/" | sed -e "s/\${word}/dog/"
Wydaje mi się to złe ze względu na konieczność ucieczki przed wieloma różnymi symbolami i przy wielu zmiennych linia będzie zbyt długa.
Czy przychodzi Ci do głowy jakieś inne eleganckie i bezpieczne rozwiązanie?