74 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| ##@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" : ".*\\.host-\\([^.]*\\)")"
 | |
|     [ -n "$host" -a "$host" != "$__myhostname" ] && return 1
 | |
|     host="$(expr "$file" : ".*\\.nothost-\\([^.]*\\)")"
 | |
|     [ -n "$host" -a "$host" == "$__myhostname" ] && return 1
 | |
| 
 | |
|     # tester si le fichier est spécifique à un utilisateur
 | |
|     local user
 | |
|     user="$(expr "$file" : ".*\\.user-\\([^.]*\\)")"
 | |
|     [ -n "$user" -a "$user" != "$USER" ] && return 1
 | |
|     user="$(expr "$file" : ".*\\.notuser-\\([^.]*\\)")"
 | |
|     [ -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
 | |
|                 [ -f "$file" ] || continue
 | |
|                 if __uenv_check_file "$dir" "$(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
 | |
| }
 |