我想要訪問由父shell腳本調用的shell腳本返回的字符串。事情是這樣的:在父腳本中訪問由shell腳本返回的值
ex.sh:
echo "Hemanth"
ex2.sh:
sh ex.sh
if [ $? == "Hemanth" ]; then
echo "Hurray!!"
else
echo "Sorry Bro!"
fi
有沒有辦法做到這一點?任何幫助,將不勝感激。
謝謝。
我想要訪問由父shell腳本調用的shell腳本返回的字符串。事情是這樣的:在父腳本中訪問由shell腳本返回的值
ex.sh:
echo "Hemanth"
ex2.sh:
sh ex.sh
if [ $? == "Hemanth" ]; then
echo "Hurray!!"
else
echo "Sorry Bro!"
fi
有沒有辦法做到這一點?任何幫助,將不勝感激。
謝謝。
默認輸出使用上ex2.sh
valueFromOtherScript="$(sh ex.sh)"
printf "%s\n" "$valueFromOtherScript"
echo
命令替換語法換行字符的字符串傳遞後,如果你不需要在它上面的變量使用printf
作爲
printf "Hemanth"
第一個腳本上的
。另外值得加上$?
將只返回最後執行的命令的退出代碼。其值被解釋爲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"