8
votes

Comment puis-je génération de fichier de script à partir d'un modèle à l'aide de bash?

J'essaie d'automatiser la création de sites pour notre serveur de développement interne.

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.

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.

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.

Toute aide est appréciée.


2 commentaires

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.


3 Réponses :


2
votes

Utilisez SED comme par exemple

sed s/%foo%/$foo/g template.conf > $newdir/httpd.conf


2 commentaires

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"



12
votes

Choisissez un moyen de marquer des paramètres. Une possibilité est : paramètre: , mais toute paire de marqueurs similaire qui ne sera pas confondue avec du texte légitime pour le fichier de modèle est bon.

écrire un sed Script (dans sed , awk , perl , ...) similaire à ce qui suit: xxx < / pré>

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 sed sed dans un fichier de commande, puis exécuter que: xxx

Notez que vous devez utiliser un piège pour vous assurer que le temporaire ne survivra pas son utilité: xxx

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 Quitter $ exit_status après la commande TRAP 0 .


0 commentaires

5
votes

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. xxx

dans ce contexte je recommanderais $ {variable} sur l'équivalent $ variable de clarté et pour éviter tout ambiguïté possible.


0 commentaires