如何获取在父脚本的 shell 中运行的脚本的当前脚本名称?



我怎么能得到一个子脚本的名称,是运行在它的父shell ?

考虑script1.sh;

#this is script 1
echo "$0"
. ./script2.sh

script2.sh;

#this is script 2
echo "$0"

由于script2.sh正在中执行[来源]与script1.sh相同的shell,运行这些脚本的输出都是;

./script1.sh

如何在script2.sh中获得script2.sh的名称?

你在采购一个脚本,而不是运行它。因此,您正在寻找BASH_SOURCE

$ cat test.sh 
echo $BASH_SOURCE
$ . ./test.sh 
./test.sh

更新:

有些人贴出,BASH_SOURCE确实是一个数组,而这实际上是真的,我不认为你需要使用所有的语法样板,因为。"$BASH_SOURCE"(是的,你应该引用你的变量)将返回数组的第一个元素,正是你正在寻找的。

说,这将是有用的张贴和使用BASH_SOURCE作为一个数组的例子,所以这里是:

$ cat parent.sh 
#!/bin/bash
. ./child.sh
$ cat child.sh 
#!/bin/bash
. ./grandchild.sh
$ cat grandchild.sh 
#/bin/bash
echo "BASH_SOURCE: $BASH_SOURCE"
echo "child      : ${BASH_SOURCE[0]}"
echo "parent1    : ${BASH_SOURCE[1]}"
echo "parent2    : ${BASH_SOURCE[2]}"
$ ./parent.sh 
BASH_SOURCE: ./grandchild.sh
child      : ./grandchild.sh
parent1    : ./child.sh
parent2    : ./parent.sh

相关内容

  • 没有找到相关文章

最新更新