[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: proposed BASH_SOURCE_PATH
From: |
konsolebox |
Subject: |
Re: proposed BASH_SOURCE_PATH |
Date: |
Tue, 14 May 2024 16:10:51 +0800 |
On Tue, May 14, 2024 at 2:09 PM Martin D Kealey <martin@kurahaupo.gen.nz> wrote:
> 1. I therefore propose that where a relative path appears in
> BASH_SOURCE_PATH, it should be taken as relative to the directory
> containing $0 (after resolving symlinks), rather than relative to $PWD.
This implies only the directory where the main script is located will
be used, correct?
Hopefully Bash already has a deterministic way of knowing the
directory the main script is located.
> 2. Search BASH_SOURCE_PATH when any relative path is given, not just a path
> that lacks a '/', so that libraries can be organized into subdirectories.
I disagree with this. Paths beginning with ./ or ../ should be
considered explicit and not searched in BASH_SOURCE_PATH.
It should use the directory of the calling script as reference when
using -i or $PWD when not.
> 3. To avoid accidentally loading a script rather than a library, while
> searching BASH_SOURCE_PATH, ignore any files that have exec permission,
> inverting the check normally made for executables in PATH. This would keep
> executables and libraries functionally separate, even if they're commingled
> in the same directories.
This deviates from the known behavior of source and makes it less
intuitive. It can be useful but it should only be enabled with an
option.
I also don't like seeing my scripts highlighted in executable color in
ls's output when they don't have to be.
> 4. When using "source -i", if BASH_SOURCE_PATH is unset or empty, it's
> taken as equivalent to '.', so that it's useful to write "source -i
> ../lib/foo.bash" in a script at "$X/bin/bar" to load "$X/lib/foo.bash".
I somewhat agree but ./ and ../ should be considered explicit so if
you want lib/foo.bash to load relative to BASH_SOURCE_PATH's ".", just
specify "lib/foo.bash".
--
konsolebox
On Tue, May 14, 2024 at 2:09 PM Martin D Kealey <martin@kurahaupo.gen.nz> wrote:
>
> I wholeheartedly support the introduction of BASH_SOURCE_PATH, but I would
> like to suggest three tweaks to its semantics.
>
> A common pattern is to unpack a script with its associated library & config
> files into a new directory, which then leaves a problem locating the
> library files whose paths are only known relative to $0 (or
> ${BASH_SOURCE[0]}).
>
> 1. I therefore propose that where a relative path appears in
> BASH_SOURCE_PATH, it should be taken as relative to the directory
> containing $0 (after resolving symlinks), rather than relative to $PWD.
>
> As an interim step until that's implemented, please ignore any relative
> entries in BASH_SOURCE_PATH, so that users who really want the cwd in
> BASH_SOURCE_PATH get used to writing $PWD or /proc/self/cwd instead.
>
> 2. Search BASH_SOURCE_PATH when any relative path is given, not just a path
> that lacks a '/', so that libraries can be organized into subdirectories.
>
> 3. To avoid accidentally loading a script rather than a library, while
> searching BASH_SOURCE_PATH, ignore any files that have exec permission,
> inverting the check normally made for executables in PATH. This would keep
> executables and libraries functionally separate, even if they're commingled
> in the same directories.
>
> Yes I know that some folk think it's occasionally useful to have a single
> file that operates as both, but (a) new features should default to the
> "safest" mode of operation, (b) this isn't python and so that's pretty rare
> in practice, and (c) there was at least two work-arounds should that
> behaviour actually be desired: (i) use an absolute path, or (ii) use PATH
> instead of BASH_SOURCE_PATH.
>
> 4. When using "source -i", if BASH_SOURCE_PATH is unset or empty, it's
> taken as equivalent to '.', so that it's useful to write "source -i
> ../lib/foo.bash" in a script at "$X/bin/bar" to load "$X/lib/foo.bash".
>
> -Martin
>
> PS: in the longer term, perhaps PATH could have similar behaviour, but
> gated by a shopt or compat check.
--
konsolebox
Re: proposed BASH_SOURCE_PATH, Chet Ramey, 2024/05/15
Re: proposed BASH_SOURCE_PATH, Koichi Murase, 2024/05/14
Re: proposed BASH_SOURCE_PATH, Léa Gris, 2024/05/14