J'essaie d'automatiser la création de sites pour notre serveur de développement interne. P>
Actuellement, cela consiste à créer un utilisateur système, MySQL utilisateur, base de données et Apache config. Je sais comment je peux tout faire dans un seul fichier Bash, mais je voulais demander s'il y avait un moyen de générer plus de manière plus proprement la configuration Apache. P>
Essentiellement ce que je veux faire, c'est générer un fichier Conf basé sur un modèle, similaire à utiliser Printf. Je pourrais certainement utiliser Printf, mais je pensais qu'il pourrait y avoir une manière plus propre, en utilisant SED ou Awk. p>
La raison pour laquelle je ne veux pas simplement utiliser PrintF est parce que la configuration Apache est d'environ 20 lignes de long et prendra la majeure partie du script Bash, tout en le rendant plus difficile à lire. P>
Toute aide est appréciée. P>
3 Réponses :
Utilisez SED comme par exemple
sed s/%foo%/$foo/g template.conf > $newdir/httpd.conf
Comment puis-je remplacer plusieurs marqueurs avec plusieurs valeurs différentes? I.e.% FOO%% remplacé par $ FOO et% bar en% remplacés par $ bar.
EASY: SED "S /% FOO% / $ FOO / G; S /% BAR% / BAR / G" CODE>
Choisissez un moyen de marquer des paramètres. Une possibilité est écrire un Si vous arrivez à un point où vous avez parfois besoin de modifier quelque chose et que vous ne le faites parfois pas, vous pouvez trouver plus facilement les commandes pertinentes Notez que vous devez utiliser un piège pour vous assurer que le temporaire ne survivra pas son utilité: p> Cela garantit que votre fichier temporaire est supprimé lorsque le script sort pour la plupart des signaux plausibles. Vous pouvez conserver un statut de sortie non-zéro des commandes précédentes et utiliser : paramètre: code>, mais toute paire de marqueurs similaire qui ne sera pas confondue avec du texte légitime pour le fichier de modèle est bon.
sed Code> Script (dans
sed code>,
awk code>,
perl code>, ...) similaire à ce qui suit: p>
sed code> sed dans un fichier de commande, puis exécuter que: p>
Quitter $ exit_status code> après la commande
TRAP 0 code>. P> p>
Je suis surpris que personne n'a mentionné ici des documents. Ce n'est probablement pas ce que l'OP veut, mais certainement un moyen d'améliorer la lisibilité du script que vous avez commencé. Prenez soin de vous permettre de vous échapper ou de paramétrer toutes les constructions que la coquille effectuera des substitutions sur. dans ce contexte je recommanderais $ {variable} sur l'équivalent $ variable de clarté et pour éviter tout ambiguïté possible. p> p>
Conservez le fichier httpd.conf prototypique séparément et demandez au script édition du fichier de modèle (prototypique) dans le fichier réel tel qu'il s'exécute. Bien sûr, cela signifie deux fichiers requis - le script et le modèle. Mais il conserve les deux fichiers disjoints logiquement disjoints.
Oui, c'est ce que je demandais (désolé si ce n'était pas clair) mais j'avais besoin de savoir comment faire ça. Je pense que la réponse de Péter Varga me procurera un peu de peau.