我有一个 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]}
最后一个元素。
获取脚本并不会将脚本的内容完全复制到主脚本中。这是喜欢运行普通脚本,但它在与主脚本相同的环境中执行。它更类似于执行函数。