2013-08-27 15:14:44 +04:00
|
|
|
##@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
|
2015-06-22 00:47:43 +04:00
|
|
|
|
2013-08-27 15:14:44 +04:00
|
|
|
# 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
|
2015-08-20 07:58:17 +04:00
|
|
|
|
2013-08-27 15:14:44 +04:00
|
|
|
# tester si le fichier est spécifique à une machine
|
|
|
|
local host
|
2015-06-22 00:47:43 +04:00
|
|
|
host="$(expr "$file" : ".*\\.host-\\([^.]*\\)")"
|
2013-08-27 15:14:44 +04:00
|
|
|
[ -n "$host" -a "$host" != "$__myhostname" ] && return 1
|
2015-06-22 00:47:43 +04:00
|
|
|
host="$(expr "$file" : ".*\\.nothost-\\([^.]*\\)")"
|
2013-08-27 15:14:44 +04:00
|
|
|
[ -n "$host" -a "$host" == "$__myhostname" ] && return 1
|
2015-08-20 07:58:17 +04:00
|
|
|
|
2013-08-27 15:14:44 +04:00
|
|
|
# tester si le fichier est spécifique à un utilisateur
|
|
|
|
local user
|
2015-06-22 00:47:43 +04:00
|
|
|
user="$(expr "$file" : ".*\\.user-\\([^.]*\\)")"
|
2013-08-27 15:14:44 +04:00
|
|
|
[ -n "$user" -a "$user" != "$USER" ] && return 1
|
2015-06-22 00:47:43 +04:00
|
|
|
user="$(expr "$file" : ".*\\.notuser-\\([^.]*\\)")"
|
2013-08-27 15:14:44 +04:00
|
|
|
[ -n "$user" -a "$user" == "$USER" ] && return 1
|
2015-08-20 07:58:17 +04:00
|
|
|
|
2013-08-27 15:14:44 +04:00
|
|
|
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
|
2015-06-22 09:53:54 +04:00
|
|
|
[ -f "$file" ] || continue
|
|
|
|
if __uenv_check_file "$dir" "$(basename -- "$file")"; then
|
2013-08-27 15:14:44 +04:00
|
|
|
source "$file"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
function __uenv_cleanup() {
|
|
|
|
unset -f __uenv_check_file
|
|
|
|
unset -f __uenv_source_dirs
|
|
|
|
unset -f __uenv_cleanup
|
|
|
|
}
|