2024年5月15日(水) 13:13 Peng Yu <pengyu...@gmail.com>:
> On Tue, May 14, 2024 at 3:35 AM Koichi Murase <myoga.mur...@gmail.com> wrote:
> > I totally agree that we should have a way to specify the files in
> > subdirectories by the path relative to the current script file.
>
> I currently use something like this to source script files relatively.
>
> declare -g -A __sourced__files__
> __sourced__files__[$BASH_SOURCE]=$(realpath "$BASH_SOURCE")
> # This is to ensure to the relative path is to the actual bash file
> instead of a symlink to the bash file.
> source 
> "${__sourced__files__[$BASH_SOURCE]%/*}/dirname1/dirname2/${BASH_SOURCE##*/}"
> # My convention is that the file sourced in the subdirectory has the
> same filename as the parent file.
> # The difference between them are expressed in the directory path,
> i.e., dirname1/dirname2

Yeah, as far as we resolve the paths by ourselves and specify the
absolute path to the `source' builtin, it would reliably work. Even
BASH_SOURCE_PATH is unnecessary.

By the way, I got an inspiration from your example. You can define
name references to automate the resolution of the directory. With the
following definitions somewhere in a framework:

  declare -gA _Impl_file _Impl_dir _Impl_empty
  declare -gn 
__file__='_Impl_file[${_Impl_empty[x${_Impl_file[${BASH_SOURCE-$0}]=$(realpath
"${BASH_SOURCE-$0}")}]-}${BASH_SOURCE-$0}]'
  declare -gn 
__dir__='_Impl_dir[${_Impl_empty[x${_Impl_dir[${BASH_SOURCE-$0}]=$(dirname
"$__file__")}]-}${BASH_SOURCE-$0}]'

you can simply call

  source "$__dir__/xxx/yyy/libzzz.bash"

in each file intended to be sourced. The value of __dir__ always
reflects the location of the current script file. The names of the
variables can be adjusted to suit your taste.

Reply via email to