簡體   English   中英

在不調用子shell的情況下捕獲源shell腳本的退出代碼

[英]Capturing the exit code of sourced shell script without invoking subshell

我有兩個shell腳本:

測試文件

function func() {
echo $1
exit 1
}

運行文件

source ./test.sh

func "Hello"
exitCode=$?
echo "Output: ${exitCode}"

結果:

Hello

我目前面臨的問題是,當函數 func 返回 1 時,我的 run.sh 腳本會中斷,之后沒有任何內容被執行。 那么,有什么方法可以在不破壞 run.sh 的情況下有效地捕獲退出代碼。 我知道有一種方法可以使用( func "Hello" )調用子外殼,但我想在不使用 flock 調用子外殼的情況下做到這一點。 我查找了參考示例,但找不到任何接近的示例。

2個“突破界限”的想法。 小心使用,因為未來對源腳本的更改可能會破壞邏輯。 僅當有一種方法可以監控該腳本是否正常工作時才推薦 - 例如,當以交互方式執行時等。

我不會在任何生產/關鍵系統中使用這種解決方案。

選項 1:在獲取文件時將“退出”別名為“返回”。

假設 test.sh 中的所有 'exit' 語句都將被替換為 'return',並且假設您願意承擔將來更改 test.sh 的風險,請考慮在采購之前使用alias

alias exit=return
source test.sh
unalias exit
func "foo"

選項 2:自動更新使用 'exit' 的函數以使用 return。

source test.sh
body=$(type func | tail +2 | sed -e 's/exit/return/g')
eval "$body"

暫無
暫無

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

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