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