包含的脚本可以知道它是否被包含并获取其真实路径吗?
假设有一个脚本调用sub.sh
该脚本,在运行其主要逻辑之前检查用户是否有权访问脚本组:
#...
mypath=`realpath -e $0`
#if blablabla ... check mypath against user groups...
#
#...
上面的脚本可以包含在另一个脚本中,如下所示:
#...
. sub.sh
#...
但是,由于它包含在另一个脚本中,因此检查会针对调用者脚本运行,这不是所需的效果。
答案1
您可能正在寻找BASH_SOURCE
数组(在 bash 中)。
例子:
源e.bs
fun(){
echo "$0"
echo "${BASH_SOURCE[0]}"
}
来源者.bs
#!/usr/bin/env bash
echo "$0"
echo "${BASH_SOURCE[0]}"
source sourcee.bs
fun
测试运行
$ ./sourcer.bs
./sourcer.bs
./sourcer.bs
./sourcer.bs
sourcee.bs #Or the full path if it's in PATH instead of the PWD
答案2
它$0
在 ZShell 中:
% echo 'set | grep -a harglebargle' > harglebargle
% source harglebargle
0=harglebargle
%
(即使有人尝试过这一ARGV0=... source ...
技巧,这似乎也是正确的。)
因此,对于完整路径:
% echo 'echo $0:a' > fullpath
% source fullpath
/home/jmates/tmp/fullpath
%