##@cooked comments # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 ## Gestion de fichiers de configuration et de répertoires de configuration ##@cooked nocomments function conf_local() { # afficher les commandes pour définir comme locales les variables utilisées # par les fonctions conf_* echo "local -a __CONF_ARRAY_VARS" } function conf_auto() { # charger la configuration pour l'outil $1 avec les variables $2..@ # conf_init n'est appelé que si des variables sont spécifiées, ce qui permet # d'appeler conf_init au préalable si une configuration spécifique doit être # faite. # Ainsi: # conf_auto NAME VARS... # est équivalent à: # conf_init VARS... # conf_auto NAME # est équivalent à: # conf_init VARS... # conf_resolve __CONF_FILES ~/etc/default/NAME.conf ~/etc/NAME.d/*.conf # conf_load "${__CONF_FILES[@]}" local __name="$1"; shift [ -n "$__name" ] || return 1 [ $# -gt 0 ] && conf_init "$@" local -a __CONF_FILES conf_resolve __CONFS_FILES "$HOME/etc/default/$name.conf" "$HOME/$name.d/*.conf" conf_load "${__CONFS_FILES[@]}" } function conf_init() { # définir les variables attendues pour chargement par conf_load # par défaut, les variables sont en mode scalaire: la définition d'une # variable écrase la valeur précédente. Avec l'option -a les variables sont # en mode tableau: les nouvelles valeurs sont rajoutées à la fin du tableau. # dans l'exemple suivant: # conf_init NAME VALUE -a SRCDIRS DESTDIRS # NAME et VALUE sont scalaires alors que SRCDIRS et DESTDIRS sont tableaux # Les variables sont initialisées à zéro ou à la valeur spécifiée, e.g # conf_init VAR=value # L'option -s permet de revenir au mode scalaire __CONF_ARRAY_VARS=() local __var __array while [ $# -gt 0 ]; do case "$1" in -a|--array) __array=1;; -s|--scalar) __array=;; *) setv "$1" [ -n "$__array" ] && array_addu __CONF_ARRAY_VARS "${1%%=*}" ;; esac shift done } function conf_resolve() { # initialiser le tableau $1 avec les fichiers de configuration correspondant # aux arguments $2..@ # - si on spécifie un fichier, il est pris tel quel s'il existe # - si on spécifie un répertoire, tous les fichiers *.conf de ce répertoire # sont pris # - si on spécifie un pattern e.g path/to/*.conf alors tous les fichiers # correspondant au pattern sont pris # - sinon l'argument est ignoré : } function conf_load() { # sourcer les fichiers spécifiés en faisant ce qui est nécessaire pour que # les variables de __CONF_ARRAY_VARS soient correctement traitées. : }