##@cooked comments # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 ## Gestion des fichiers de ~/etc/{profile.d,bashrc.d,default} ##@cooked nocomments uprovide uenv function __uenv_check_file() { # Vérifier si le fichier $2 du répertoire $1 doit être sourcé. # note: pour utiliser cette fonction, les variables __uname_system et # __myhostname doivent être définies. local dir="$1" file="$2" [ -f "$dir/$file" ] || return # ignorer les fichiers qui ont l'extension .ignore [ "${file%%.ignore}" != "$file" ] && return 1 # tester si le fichier est spécifique à une plateforme local system system="$(expr "$file" : ".*\\.\\[\\([^.]*\\)\\]")" [ -n "$system" -a "$system" != "$__uname_system" ] && return 1 system="$(expr "$file" : ".*\\.\\[-\\([^.]*\\)\\]")" [ -n "$system" -a "$system" == "$__uname_system" ] && return 1 # tester si le fichier est spécifique à une machine local host host="$(expr "$file" : ".*\\.on_\\([^.]*\\)")" [ -n "$host" -a "$host" != "$__myhostname" ] && return 1 host="$(expr "$file" : ".*\\.noton_\\([^.]*\\)")" [ -n "$host" -a "$host" == "$__myhostname" ] && return 1 # tester si le fichier est spécifique à un utilisateur local user user="$(expr "$file" : ".*\\.for_\\([^.]*\\)")" [ -n "$user" -a "$user" != "$USER" ] && return 1 user="$(expr "$file" : ".*\\.notfor_\\([^.]*\\)")" [ -n "$user" -a "$user" == "$USER" ] && return 1 return 0 } function __uenv_source_dirs() { # charger les fichiers qui sont dans le répertoire $1. Si un fichier # .source_in_order existe dans ce répertoire, il fixe l'ordre dans lesquel # les fichiers sont chargés. Sinon, les fichiers sont sourcé par ordre # alphabétique. local __uname_system __myhostname __uname_system=`uname -s` [ "${__uname_system#CYGWIN}" != "$__uname_system" ] && __uname_system=Cygwin [ "${__uname_system#MINGW32}" != "$__uname_system" ] && __uname_system=Mingw __myhostname="${HOSTNAME%%.*}" local dir file sio for dir in "$@"; do [ -d "$dir" ] || continue sio="$dir/.source_in_order" if [ -f "$sio" ]; then source "$sio" else for file in "$dir/"*; do if __uenv_check_file "$(dirname "$file")" "$(basename "$file")"; then source "$file" fi done fi done } function __uenv_cleanup() { unset -f __uenv_check_file unset -f __uenv_source_dirs unset -f __uenv_cleanup }