On 03/29/2013 12:57 PM, Greg Wooledge wrote: > On Fri, Mar 29, 2013 at 12:41:46AM -0700, Linda Walsh wrote: >> include was designed to search the path for functions that >> are relative paths. While the normal sourcepath allows searching for >> filenames on the search path, I don't believe (please correct if I am wrong >> and this works now, as it would make life much simpler) that the PATH will >> be searched if you give it something like: >> >> source lib/Util/sourcefile.shh > > Is that all you want? Here: > > include() { > local paths dir > IFS=: read -ra paths <<< "$PATH" > for dir in "${paths[@]}"; do > if [[ -r $dir/$1 ]]; then > source "$dir/$1" > return > fi > done > echo "could not find '$1' in PATH" >&2 > return 1 > } > AFAIK, this won't work if the sourced file contains declarations like 'declare -a foo=(1 2)'; those variables will be made local to the 'include' function. Perhaps an alias could work better (but writing it might involve some unpleasant tricks with eval etc.)
Regards, Stefano