[英]BASH: How tell if script uses exit?
假設我有兩個腳本,它們只是從無用的下標中打印出返回代碼:
SCRIPT1
(echo; exit 0)
echo $?
SCRIPT2
(echo)
echo $?
兩者都返回0
。 但是有沒有辦法告訴第一個下標顯式使用exit
命令?
經過研究,我取得了一些突破。 即,您可以設置一個exit_handler
,通過簡單地檢查最后一個命令就可以判斷是否有退出調用。
#! /bin/bash
exit_handler () {
ret=$?
if echo "$BASH_COMMAND" | grep -e "^exit " >> /dev/null
then
echo "it was an explicit exit"
else
echo "it was an implicit exit"
fi
exit $ret
}
trap "exit_handler" EXIT
exit 22
這將打印
it was an explicit exit
現在,為了告訴父級,而不是回顯,我們可以將其寫入文件,命名管道或其他內容。
根據choroba的注意,不帶參數的exit
將給出implicit call
,這是錯誤的,因為exit
(不帶參數)與exit $?
相同exit $?
。 因此,正則表達式必須考慮到這一點:
#! /bin/bash
exit_handler () {
ret=$?
if echo "$BASH_COMMAND" | grep -e "^exit \|^exit$" >> /dev/null
then
echo "it was an explicit exit"
else
echo "it was an implicit exit"
fi
exit $ret
}
trap "exit_handler" EXIT
exit 22
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.