簡體   English   中英

如何獲取在父腳本的 shell 中運行的腳本的當前腳本名稱?

[英]How can I get the current script name of a script running in parent script's 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM