From 6001786990501e849f04e018dccb0b5bf7e6d991 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Mon, 21 Apr 2014 14:25:06 -0400 Subject: improve config-path --- .local/bin/config-path | 80 +++++++++++++++++++++++++++----------------------- 1 file changed, 44 insertions(+), 36 deletions(-) (limited to '.local') diff --git a/.local/bin/config-path b/.local/bin/config-path index 99f0910..d0afa4a 100755 --- a/.local/bin/config-path +++ b/.local/bin/config-path @@ -12,6 +12,8 @@ prefixes=( ###################################################################### +IFS=: + in_array() { local needle=$1; shift local haystack=("$@") @@ -22,48 +24,54 @@ in_array() { return 1 } +var_init() { + eval "ary_$1=(\$$1)" +} + +var_add() { + local varname=ary_$1; shift + local var_all="${varname}[@]" + local dirs=("$@") + + local dir + for dir in "${dirs[@]}"; do + if [[ -d "$dir" ]] && ! in_array "$dir" "${!var_all}"; then + eval "$varname=(\"\$dir\" \"\${$var_all}\")" + fi + done +} + +var_done() { + eval "$1=\"\${ary_$1[*]}\"" + declare -p $1 +} + +###################################################################### + # Import existing values -IFS=: paths=($PATH) -IFS=: manpaths=($MANPATH) -IFS=: rubylibs=($RUBYLIB) -IFS=: perl5libs=($PERL5LIB) +var_init PATH +var_init MANPATH +var_init LD_LIBRARY_PATH +var_init RUBYLIB +var_init PERL5LIB # Scan through prefixes for prefix in "${prefixes[@]}"; do - # PATH - for dir in "$prefix/bin" "$prefix/sbin"; do - if [[ -d "$dir" ]] && ! in_array "$dir" "${paths[@]}"; then - paths=("$dir" "${paths[@]}") - fi - done - # MANPATH - dir="$prefix/share/man" - if [[ -d "$dir" ]] && ! in_array "$dir" "${manpaths[@]}"; then - manpaths=("$dir" "${manpaths[@]}") - fi - # RUBYLIB - dir="$prefix/lib" - if [[ -d "$dir" ]] && ! in_array "$dir" "${rubylibs[@]}"; then - rubylibs=("$dir" "${rubylibs[@]}") - fi - # PERL5LIB - for dir in "$prefix"/lib*/perl5; do - if [[ -d "$dir" ]] && in_array "$dir" "${manpaths[@]}"; then - perl5libs=("$dir" "${perl5libs[@]}") - fi - done + var_add PATH "$prefix/bin" "$prefix/sbin" + var_add MANPATH "$prefix/share/man" + var_add LD_LIBRARY_PATH "$prefix"/lib{,32,64} + var_add RUBYLIB "$prefix"/lib{,32,64} + var_add PERL5LIB "$prefix"/lib{,32,64}/perl5 done -# Finally, print our values -IFS=: PATH="${paths[*]}" -IFS=: MANPATH="${manpaths[*]}" -IFS=: RUBYLIB="${rubylibs[*]}" -IFS=: PERL5LIB="${perl5libs[*]}" -# The sed bit here is the only time we call an external program + +# Finally, print our values +# The `sed` bit here is the only time we call an external program { - declare -p PATH - declare -p MANPATH - declare -p RUBYLIB - declare -p PERL5LIB + var_done PATH + var_done MANPATH + var_done LD_LIBRARY_PATH + var_done RUBYLIB + var_done PERL5LIB } | sed 's/^declare \(-\S* \)*//' -- cgit v1.2.3