> Not sure how common but this is what makes sense. Or name sourceables
> foo.sh, bar.sh and executables foo, bar so they don't clash and source with
> `${BASH_SOURCE%/*}' prepended to PATH and it'll work fine.
>
> This feature request sounded promising at first, it feels like
> bike-shedding now.
I think this is exactly why this feature is necessary. Unless I am
misunderstanding, simply prepending `${BASH_SOURCE%/*}' to a sourced path will
not work in all cases. For example, when executing the main script directly
inside the script directory (e.g. `bash main.sh`) you would end up with an
invalid path (e.g. main.sh/../lib/foo.sh).
To solve such a seemingly simple problem when first introduced to Bash, I
turned to StackOverflow. Note this question has hundreds of answers of varying
complexity with thousands of up and downvotes. Yikes!
https://stackoverflow.com/questions/59895/how-do-i-get-the-directory-where-a-bash-script-is-located-from-within-the-script
Since I find the accepted answer to be overly complex for my needs, I usually
just do this:
declare -r SCRIPT_DIR="$(dirname -- "${BASH_SOURCE[0]}")"
source -- "${SCRIPT_DIR}/../lib/foo.sh"
source -- "${SCRIPT_DIR}/../lib/bar.sh"
...
But, I still don’t like it. I have to start off each script with a slow command
substitution (subshell) which introduces a variable that I don’t really want,
but it’s too slow to do this repeatedly:
source -- "$(dirname -- "${BASH_SOURCE[0]}")/../lib/foo.sh"
source -- "$(dirname -- "${BASH_SOURCE[0]}")/../lib/foo.sh"
...
I would love to be able to do this for efficiency and readability (see below).
This would prevent future users from having to sift through hundreds of faulty
StackOverflow answers like I did.
source -- "${BASH_SOURCE_PATH}/../lib/foo.sh"
source -- "${BASH_SOURCE_PATH}/../lib/bar.sh"
...
-Will