Linux-对于BASH_SOURCE的理解
1. 使用场景
- 对于某个脚本
some_script.sh
,希望获取到该脚本所在的绝对路径 - 该脚本当中的其他文件,可以通过脚本路径 + 相对位置,拼接出完整的绝对路径
- 可以通过一行命令,获取脚本所在的绝对路径,内容如下:
sh
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
- 解读如下:
"${BASH_SOURCE[0]}"
该变量可以获取到该脚本source
层次的第一层dirname
获取该脚本所在目录的绝对路径- 切换到该目录当中,并且输出路径,也就是需要获得的绝对路径
2. 为什么 BASH_SOURCE
是一个数组
"${BASH_SOURCE}
变量是bash
提供的保留变量,用以提供source
层次 。这种说法听上去是抽象的,所以用一个具象的例子来说明可能更好。- 目录结构如下:
sh
tree .
.
├── a.sh
└── b.sh
a.sh
内容如下:
sh
cat a.sh
echo "A"
source "./b.sh"
echo "A: ${BASH_SOURCE[@]}"
b.sh
内容如下:
sh
cat b.sh
echo "B"
echo "B: ${BASH_SOURCE[@]}"
- 换言之,
source
的层次是b --> a --> user
,那么,执行bash a.sh
结果如下:
sh
# bash a.sh
A
B
B: ./b.sh a.sh
A: a.sh
b.sh
被a.sh
执行source
,那么其输出的数组体现从内而外的source
执行顺序(或者说执行层次)