我有一个 bash 脚本,它输出脚本本身的路径名
$ cat f4.sh
#! /bin/bash
echo "${BASH_SOURCE[0]}"
我想如果我在另一个脚本中获取脚本并运行另一个脚本,它将输出另一个脚本的路径名,因为 sourcing 就像将来源脚本的内容复制到 sourcing 脚本中并运行 sourcing 脚本。
但是我错了,还是输出原脚本的路径名
$ cat ff.sh
#! /bin/bash
source ../f4.sh
$ bash ff.sh
../f4.sh
为什么?
我想知道另一个脚本是否可以通过使用 f4.sh 而不是直接使用来输出其路径名${BASH_SOURCE[0]}
?谢谢。
在这种情况下,如果您想从 获取主脚本的路径名
BASH_SOURCE
,则必须使用${BASH_SOURCE[1]}
.对于每一级采购,一个新元素被添加到数组的开头,
BASH_SOURCE
因此它${BASH_SOURCE[0]}
始终是当前源文件和${BASH_SOURCE[1]}
它的来源(以及它${BASH_SOURCE[2]}
的来源,如果它是来源的话)。要查看主脚本,请查看最后一个元素。${BASH_SOURCE[-1]}
获取脚本并不会将脚本的内容完全复制到主脚本中。它就像运行一个普通的脚本,但它在与主脚本相同的环境中执行。它更类似于执行一个函数。