語境:給定一個主函數和一個清理函數,如何(規範地)在Bash/Linux中返回退出狀態?
我有一個bash腳本(用於其他腳本的包裝,真的),這不下面的僞代碼:
問題do a main function
if the main function returns:
$returncode = $? #most recent return code
if the main function runs longer than a timeout:
kill the main function
$returncode = 140 #the semi-canonical "exceeded allowed wall clock time" status
run a cleanup function
if the cleanup function returns an error: #nonzero return code
exit $? #exit the program with the status returned from the cleanup function
else #cleanup was successful
....
:應該發生什麼後
最後一行?
如果清理函數成功,但主函數不成功,我的程序應該返回0(用於成功清理)還是$returncode
,它包含主函數的返回碼(可能爲非零和不成功)?
對於特定的應用程序,答案很簡單:「這取決於您需要的腳本。」但是,這更多的是一個普遍的/規範的問題(如果這是錯誤的地方,用它殺死它):在Bash(或者一般的Linux)編程中,你通常希望返回狀態那「意味着」某事(即$returncode
)或者你忽略了這種主觀性,並簡單地返回最近函數的代碼?
這不是Bash特有的:如果我有任何類型的獨立可執行文件,規範它應該在這些情況下表現嗎?顯然,這有些值得商榷。即使有這樣的系統,我相信很多人都會忽略它。儘管如此,我想知道。
乾杯!
儘管在某些版本的Bash中,EXIT僞信號不管理TERM和/或INT事件。最安全的是做一個'陷阱清理INT TERM EXIT' –