簡體   English   中英

BASH:如何判斷腳本是否使用退出?

[英]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.

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