我怎么能得到一个子脚本的名称,是运行在它的父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