2012-10-17 99 views
2


我有兩個shell腳本,說script1.sh和script2.sh。我從script1.sh調用script2.sh。在script2.sh中,完成了一些評估,並根據結果設置標誌。現在我需要將該標誌傳遞給script1.sh,以此來決定script1.sh是否應該繼續執行或退出。我沒有使用函數。而當我導出標誌,在script1.sh中它是空白的。
我現在的問題是如何從script2.sh返回標誌?
有幫助嗎?有任何想法嗎?經驗分享?將子shell腳本的值返回給父腳本

回答

1

我希望你(由語句exit {value} SE)

例如使用返回代碼從script2.sh

./script2.sh 

$?包含script2.sh的退出聲明中的返回值。

這裏不能使用exportexport使變量可用於後續子進程。它不能用於將值傳遞迴父進程,因爲您正在修改特定於子進程的變量副本。

3

你可以打印出結果並捕捉它SCRIPT1:

# Script 1 
flag="$(./script2.bash)" 

和:

# Script 2 
[...] 
printf '%s\n' "$flag" 

希望這有助於=)

+0

我寧願這個解決方案。請記住,非零退出狀態通常表示錯誤; 'script2.bash'可能有幾個不同的非錯誤條件,導致'script1.bash'的不同標誌值。 – chepner

+0

你知道解決方案返回多個值而不是一個? – Amir

+0

我通常將它們作爲一個值返回,並用變量中不存在的分隔符分隔。然後我使用'cut'將返回值分成多個值。因此,在腳本2中,我會做類似於:'printf'%s,%s \ n'「$ var1」「$ var2」'(請注意''printf'格式字符串中的'''分隔符')。然後在腳本1我會做:'single_value =「$(./ script1.bash)」'後面跟着'var1 =「$(echo」$ single_value「| cut -f1 -d',')」'' var2 =「$(echo $ single_value」| cut -f2 -d',')「'。'-d'指定分隔符(在本例中爲''''),'-f'指定哪個字段。希望這有助於=) –

1

只需使用SCRIPT2的退出狀態:

if script2.sh ; then 
    echo Exited with zero value 
else 
    echo Exited with non zero 
fi 

在script2中使用exit 0exit 1來設置標誌。

相關問題