#!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 source "$(dirname -- "$0")/lib/ulib/auto" || exit 1 urequire conf function display_help() { local OENC="$UTF8" uecho "$scriptname: Activer ou désactiver un paramètre dans un fichier de configuration USAGE $scriptname [options] config name[=value]... OPTIONS -e Activer le paramètre (par défaut). Si le paramètre existe, mais est commenté, il est décommenté. Si une valeur est spécifiée pour le paramètre, le paramètre est modifié dans le fichier en conséquence. -q Cette option s'utilise avec l'option -e et le type shell. Elle permet de s'assurer que les valeurs ayant des espaces et/ou des caractères spéciaux sont quotées -d Désactiver le paramètre. Le paramètre est commenté s'il existe dans le fichier -a Ajouter une valeur à la variable, ou un paramètre avec cette valeur (suivant le type de fichier de configuration) -A Ajouter une valeur au tableau, ou un paramètre avec cette valeur (suivant le type de fichier de configuration) -t TYPE Type de fichier de configuration. TYPE peut être sh (par défaut), apache ou mysql. shell les paramètres sont de la forme 'name=value', et les commentaires débutent par '#'. Ce type peut être utilisé pour tous les fichiers ayant ces caractéristiques, dont les fichiers de script shell apache les paramètres sont de la forme 'name value', et les commentaires débutent par '#'. Ce type peut être utilisé pour tous les fichiers ayant ces caractéristiques, dont les fichiers de configuration apache mysql, php les paramètres sont dans des sections nommées de la forme [section], sont de la forme 'name=value', et les commentaires débutent par '#' ou ';' Ce type peut être utilisé pour tous les fichiers ayant ces caractéristiques, dont les fichiers de configuration de mysql et de php. Avec ce type, la section est obligatoire. -s SECTION Avec le type mysql, préciser la section dans laquelle inscrire le paramètre. Attention! La section DOIT exister, elle n'est pas créée automatiquement." } action=enable quoted= type=auto section= parse_opts "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ -e action=enable \ -q quoted=1 \ -d action=disable \ -a action=append \ -A action=array_append \ -t: type= \ --shell type=shell \ --apache type=apache \ --mysql type=mysql \ --php type=mysql \ -s: section= \ @ args -- "$@" && set -- "${args[@]}" || die "$args" config="$1"; shift [ -f "$config" ] || touch "$config" || die if [ "$type" == auto ]; then # essayer de deviner le type [ -f "$config" ] && first_lines="$(head -n5 <"$config")" || first_lines= name="$(basename "$config")" MYSQL_NAMES=(my.cnf php.ini) APACHE_NAMES=(apache{,2}.conf httpd.conf) # ... d'abord sur la base du nom if array_contains MYSQL_NAMES "$name"; then type=mysql elif array_contains APACHE_NAMES "$name"; then type=apache # ... puis sur la ligne de mode elif quietgrep "^[ $TAB]*#.*-\\*-.* mode: sh .*-\\*-" <<<"$first_lines"; then type=shell elif quietgrep "^[ $TAB]*#.*-\\*-.* mode: conf .*-\\*-" <<<"$first_lines"; then type=apache elif [[ "$name" == *.sh ]]; then type=shell elif [[ "$name" == *.conf ]]; then type=apache else # type shell par défaut type=shell fi fi case "$type" in s|sh|shell) [ -n "$quoted" -a "$action" == "enable" ] && action=enableq "conf_$action" "$config" "$@" ;; a|apache) "aconf_$action" "$config" "$@" ;; m|mysql|p|php) [ -n "$section" ] || die "Il faut spécifier la section avec -s" "mconf_$action" "$config" "$section" "$@" ;; esac