# Path information is stored on separate lines in XXXdirs. # We extract each directory exists and add it to the appropriate PATH. # # Location of the XXXdirs files. DIR="$HOME/.profile.d" # Set one path to be the same as another. function copypath() { newpath="$1"; shift oldpath="$1"; shift # Sanitise and export. path="$(eval echo \$$oldpath)" [ -z "$path" ] || eval "export $newpath='$path'" unset path newpath oldpath } # Set a path from directories. function makepath() { newpath="$1"; shift dirs="$1"; shift # Check the file exists. [ -e "$DIR/$dirs" ] || return # Set IFS to newline only so that we can read $(embedded shell commands). JGD=$IFS IFS=' ' # Read them. path= while read dir; do dir=$(eval echo "$dir") [ -d "$dir" ] || continue path="$path:$dir" done < "$DIR/$dirs" unset dir # Restore IFS. IFS=$JGD unset JGD # Sanitise path. path=${path#:} [ -z "$path" ] && return # Export. eval "export $newpath='$path'" unset path newpath dirs } makepath PATH bindirs makepath C_INCLUDE_PATH incdirs copypath CPLUS_INCLUDE_PATH C_INCLUDE_PATH makepath LD_LIBRARY_PATH libdirs copypath LD_RUN_PATH PATH makepath MANPATH mandirs makepath PKG_CONFIG_PATH pkgdirs unset dirs copypath makepath newpath