我有一个bash脚本,它输出脚本本身的路径名。
$ cat f4.sh
#! /bin/bash
echo "${BASH_SOURCE[0]}"我设想,如果我在另一个脚本中源脚本并运行另一个脚本,它将输出另一个脚本的路径名,因为源代码就像将源脚本的内容复制到源脚本并运行源脚本一样。
但是我错了,它仍然输出原始脚本的路径名。
$ cat ff.sh
#! /bin/bash
source ../f4.sh
$ bash ff.sh
../f4.sh为什么?
我想知道另一个脚本是否可以通过使用f4.sh而不是直接使用${BASH_SOURCE[0]}来输出它的路径名?谢谢。
发布于 2018-11-14 21:34:01
在这种情况下,如果您想从BASH_SOURCE获取主脚本的路径名,就必须使用${BASH_SOURCE[1]}。
对于每个级别的资源,都会在BASH_SOURCE数组的开头添加一个新元素,以便${BASH_SOURCE[0]}始终是当前源文件,而${BASH_SOURCE[1]}则是它的源文件(如果来源,则${BASH_SOURCE[2]}是它的源文件)。要获得主脚本,请查看最后一个元素${BASH_SOURCE[-1]}。
获取脚本并不会将脚本的内容完全复制到主脚本中。这就像运行一个普通脚本,但它在与主脚本相同的环境中执行。它更类似于执行一个函数。
https://unix.stackexchange.com/questions/481803
复制相似问题