获取包含“echo ${BASH_SOURCE[0]}”的脚本仍然显示源脚本的路径名

获取包含“echo ${BASH_SOURCE[0]}”的脚本仍然显示源脚本的路径名

我有一个 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]}?谢谢。

答案1

在这种情况下,如果您想从 获取主脚本的路径名BASH_SOURCE,则必须使用${BASH_SOURCE[1]}

对于每个级别的采购,都会添加一个新元素开始数组的BASH_SOURCE,因此它${BASH_SOURCE[0]}始终是当前源文件和${BASH_SOURCE[1]}它的来源文件(以及${BASH_SOURCE[2]}它的源文件)来源,如果来源)。要了解主脚本,请查看${BASH_SOURCE[-1]}最后一个元素。

获取脚本并不会将脚本的内容完全复制到主脚本中。这是喜欢运行普通脚本,但它在与主脚本相同的环境中执行。它更类似于执行函数。

相关内容