2017-02-08 97 views
0

我想要訪問由父shell腳本調用的shell腳本返回的字符串。事情是這樣的:在父腳本中訪問由shell腳本返回的值

ex.sh:

echo "Hemanth" 

ex2.sh:

sh ex.sh 

if [ $? == "Hemanth" ]; then 
    echo "Hurray!!" 
else 
    echo "Sorry Bro!" 
fi 

有沒有辦法做到這一點?任何幫助,將不勝感激。

謝謝。

回答

2

默認輸出使用上ex2.sh

valueFromOtherScript="$(sh ex.sh)" 
printf "%s\n" "$valueFromOtherScript" 

echo命令替換語法換行字符的字符串傳遞後,如果你不需要在它上面的變量使用printf作爲

printf "Hemanth" 
第一個腳本上的

。另外值得加上$?將只返回最後執行的命令的退出代碼。其值被解釋爲0是成功的運行並且在失敗時爲非零。它會從未嘗試使用有一個字符串值。

0

Bash腳本並不真正「返回」一個字符串。你想要做的是捕獲腳本的輸出(或外部程序或函數,它們在這方面的表現都相同)。

命令替換是捕獲輸出的常用方法。

captured_output="$(sh ex.sh)" 

此初始化變量captured_output包含所有該字符串是通過輸出ex.sh。那麼,不完全是。任何腳本(或命令或函數)實際上都有兩個輸出通道,通常稱爲「標準輸出」(文件描述符編號1)和「標準錯誤」(文件描述符編號2)。從終端執行時,通常都會在屏幕上結束。但是如果需要的話,他們可以分開處理。例如,如果要真正捕獲所有輸出(包括錯誤消息),則可以在命令後面添加一個「重定向」,該命令告訴shell你希望標準錯誤到標準輸出的相同位置。

captured_output="$(sh ex.sh 2>&1)" 

如果省略重定向,以及腳本輸出標準錯誤的東西,那麼這仍然會在屏幕上顯示,而不會被捕獲。

另一種方式來捕捉輸出其發送到一個文件,然後讀回該文件給一個變量,就像這樣:

sh ex.sh > output_file.log 
captured_output="$(<output_file.log)" 

腳本(或外部程序或功能)確實有叫什麼一個返回碼,它是一個整數。按照慣例,值爲0意味着「成功」,並且任何其他值表示異常執行(但不一定是失敗):該返回代碼的含義不是標準化的,它最終特定於每個腳本,程序或函數。

在執行結束後立即在$?特殊shell變量中使用此返回碼。

sh ex.sh 
return_code=$? 
echo "Return code is $return_code"