如何找出bash中另一个脚本调用的脚本(“sourceed”)的名称?

如何找出bash中另一个脚本调用的脚本(“sourceed”)的名称?,bash,Bash,可能重复: 当使用source从另一个脚本调用bash脚本时,我无法从该脚本中找出被调用脚本的名称 file1.sh #!/bin/bash echo "from file1: $0" source file2.sh #!/bin/bash echo "from file2: $0" $ ./file1.sh from file1: ./file1.sh # expected from file2: ./file1.sh # was expecting ./file2.sh fil

可能重复:

当使用
source
从另一个脚本调用bash脚本时,我无法从该脚本中找出被调用脚本的名称

file1.sh

#!/bin/bash
echo "from file1: $0"
source file2.sh
#!/bin/bash
echo "from file2: $0"
$ ./file1.sh
from file1: ./file1.sh  # expected
from file2: ./file1.sh  # was expecting ./file2.sh
file2.sh

#!/bin/bash
echo "from file1: $0"
source file2.sh
#!/bin/bash
echo "from file2: $0"
$ ./file1.sh
from file1: ./file1.sh  # expected
from file2: ./file1.sh  # was expecting ./file2.sh
运行文件1.sh

#!/bin/bash
echo "from file1: $0"
source file2.sh
#!/bin/bash
echo "from file2: $0"
$ ./file1.sh
from file1: ./file1.sh  # expected
from file2: ./file1.sh  # was expecting ./file2.sh

Q:如何从
file2.sh
中检索
file2.sh

如果您
源代码
脚本,那么您将强制脚本在当前进程/shell中运行。这意味着运行的
file1.sh
脚本中的变量不会丢失。由于
$0
被设置为
file1.sh
,因此它保持原样

如果要获取
file2
的名称,可以执行以下操作-

file1.sh file2.sh
file2.sh
更改为:

#!/bin/bash
echo "from file2: ${BASH_SOURCE[0]}"

请注意,
BASH\u SOURCE
是一个数组变量。有关更多信息,请参阅Bash手册页。

@Matt-尤其是这个答案:这建议使用
$Bash\u SOURCE
。如果文件2位于不同的目录中,则
$(basename${Bash\u SOURCE[0]})
仅获取文件名似乎效果更好。要获取目录,只需使用
“$(cd“$(dirname”$BASH_SOURCE”)“pwd-P)”
这将调用另一个shell实例和一些其他可能有问题的东西,这些东西很可能不是他们想要的,我知道这不是我想要的。