123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- # $Id$
- # Copyright (c) 2000,2001 Peter B. West <pbwest@powerup.com.au>
- # N.B The following PATH manipulation functions
- # 1) MUST NOT have a vertical bar `|' in any specified path
- # 2) Handle the empty path "", but do not equate the empty path with "."
-
- # These functions have been written to cope with spaces in the file paths.
-
- # Clear path element given as arg from PATH
- # N.B. path element MUST NOT contain a vertical bar `|'
- rem_path() {
- if [ $# -lt 1 ]; then return; fi
- rem_vpath PATH "$@"
- }
-
- # Clear path element(s) given as arg 2 (3 ...) from the path named in arg1
- # N.B. path element MUST NOT contain a vertical bar `|'
- rem_vpath() {
- if [ $# -lt 2 ]; then return; fi
- eval _AP_=\"\$$1\"
- _P_=$1
- shift
- while [ $# -ge 1 ]; do
- _RP_="$1"
- shift
- _AP_=`echo $_AP_|
- sed ':loop
- {s|:'"$_RP_"':|:|g
- t loop
- }
- s|^'"$_RP_"':||
- s|:'"$_RP_"'$||
- s|^'"$_RP_"'$||'`
- eval $_P_=\"$_AP_\"
- done
- unset _AP_ _P_ _RP_
- }
-
- # To path named in $1, append path element arg(s), replacing all existing
- # instances in the named path
- # N.B. path elements MUST NOT contain a vertical bar `|'
- app_vpath() {
- _VP_=$1; shift
- eval _VAL_=\"\$$_VP_\"
- for el
- do
- rem_vpath _VAL_ "$el"
- _VAL_="${_VAL_:+${_VAL_}:}$el"
- done
- eval ${_VP_}=\"$_VAL_\"
- export $_VP_
- unset _VP_ _VAL_
- }
-
- # Append path element(s) given as args to PATH, replacing all existing
- # instances in the PATH
- # N.B. path elements MUST NOT contain a vertical bar `|'
- app_path() {
- app_vpath PATH "$@"
- }
-
- # To path named in $1, prepend path element arg(s), replacing all existing
- # instances in the named path. Elements will be appear in the PATH in
- # argument order.
- # N.B. path elements MUST NOT contain a vertical bar `|'
- pre_vpath() {
- _VP_=$1; shift
- eval _VAL_=\"\$$_VP_\"
- _elx_=0
- while [ $# -gt 0 ]
- do
- _elx_=`expr $_elx_ + 1`
- eval _VAL_$_elx_=\"\$1\"
- shift
- done
- while [ $_elx_ -gt 0 ]
- do
- eval _el_=\"\$_VAL_$_elx_\"
- unset _VAL_$_elx_
- _elx_=`expr $_elx_ - 1`
- rem_vpath _VAL_ "$_el_"
- _VAL_="$_el_${_VAL_:+:${_VAL_}}"
- done
- eval ${_VP_}=\"$_VAL_\"
- export $_VP_
- unset _VP_ _VAL_
- }
-
- # Prepend path element(s) given as args to PATH, replacing all existing
- # instances in the PATH. N.B. elements will be appear in the PATH in
- # REVERSE argument order.
- # N.B. path elements MUST NOT contain a vertical bar `|'
- pre_path() {
- pre_vpath PATH "$@"
- }
-
- # This function is no longer used. Originally written for clean_vpath
- # in order to process the arguments to pre_vpath in reverse order, it
- # has been superseded by the modification to pre_vpath which processes
- # its args in reverse order so that the argument list order will be
- # preserved at the front of the path
-
- # echo arguments in reverse order. Args echoed are surrounded by
- # single quotes - to provide these successfully to a subsequent function
- # or command, submit the lot to an eval.
- # E.g. eval command `reverse "arg 1" arg2 "This is arg 3"`
- # will supply three arguments to the echo.
- # This will not preserve multiple spaces in the individal arguments.
- # For that, use
- # eval command "`reverse 'arg 1' arg2 'This is arg 3'`"
- # I.e. use single quotes around the individual args, and surround the
- # whole with double quotes; or
- # var=`reverse "arg 1" arg2 "This is arg 3"`
- # eval command "$var"
-
- # This will BREAK if the arguments contain \<char> sequences which represent
- # valid escaped characters, e.g. \\ or \t
-
- # Variables used: _ix_ _o_ _v_ _stk_1 .. _stk_$#
- reverseargs() {
- _ix_=0
- while [ $# -gt 0 ]
- do
- _ix_=`expr $_ix_ + 1`
- eval _stk_$_ix_=\"\$1\"
- shift
- done
-
- # No need to worry about the extra space at the beginning
- while [ $_ix_ -gt 0 ]
- do
- eval _v_=\"\$_stk_$_ix_\"
- unset _stk_$_ix_
- _o_="$_o_ '$_v_'"
- _ix_=`expr $_ix_ - 1`
- done
-
- echo "$_o_"
- unset _o_ _v_ _ix_
- }
-
- # Clean a path - run pre_vpath with every current element of the path
- # in reverse order
- # This removes all duplicates in the path, and leaves the first instance
- # of a path element in its original relative place - later ones are deleted.
- clean_vpath() {
- _CVP_=$1; shift
- # _CVP_ contains the name of the path
- eval _CVAL_=\"\$$_CVP_\"
- # _CVAL_ contains the value of the path
- _CVAL_=`echo "$_CVAL_"|sed 's/^/"/
- s/:/" "/g
- s/$/"/'`
- eval pre_vpath $_CVP_ "$_CVAL_"
- unset _CVAL_ _CVP_
- }
-
- clean_path() {
- clean_vpath PATH
- }
|