2017-05-08 54 views
0

我有2個shell腳本今天說a.sh和b.sh,兩者都是獨立運行,並有退出代碼檢查,如:如何檢查調用腳本殼

echo "Executing: $COMMAND" 
eval $COMMAND 
exitCode=$? 
exit $exitCode 

對於某些場景我需要從a.sh中調用b.sh. 我需要檢查b.sh是否從a.sh被調用,然後控制應該在執行b.sh後傳遞給a.sh否則遵循b.sh的默認行爲

shell腳本中是否有任何方式I可以獲得調用腳本?以便我可以實現邏輯:

if (calling script == a.sh) 
then do not exit 
else 
    follow the default behavior 
+0

你在使用'bash'還是其他的shell? – Inian

+0

[爲什麼應該在Bash中避免eval,並且我應該使用什麼呢?](http://stackoverflow.com/questions/17529220/why-should-eval-be-avoided-in-bash-and-what-should -i使用,代替) – ceving

回答

0

您可以跟蹤文件中的某些變量。

set VAR = A.SH //at the beginning of a.sh 

並將其設置爲在其他地點的其他價值。

如果您使用的是bash,您可以獲得當前文件名$ 0。

echo $0 
0

您可以要求arg檢查腳本b.​​sh中的if語句。腳本a.sh用這個確切的參數來執行腳本b.sh。

腳本

sh ./b.sh script_a 

腳本B

if($1 == script_a) 
//$1 means first argument, which you typed in script a 
.... 
.... 
1

在Linux上,你可以使用proc file system得到一些進程的命令行參數。 shell腳本的父進程ID存儲在$PPID中。

假設a.sh看起來是這樣的:

#! /bin/bash 
./b.sh 

,你這樣調用它:

./a.sh 

您可以使用以下b.sh獲取父腳本名稱:

#! /bin/bash 
cut -d $'\0' -f 2 /proc/$PPID/cmdline