說我有兩個腳本,只是從沒用標打印回返回代碼:BASH:如何判斷腳本是否使用退出?
SCRIPT1
(echo; exit 0)
echo $?
SCRIPT2
(echo)
echo $?
兩個回饋0
。但是有沒有辦法告訴第一個下標明確使用exit
命令?
說我有兩個腳本,只是從沒用標打印回返回代碼:BASH:如何判斷腳本是否使用退出?
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 $?
。因此,正則表達式必須考慮到這一點:
#! /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
您正在每個'script1'和'script2'中實現'exit_handler()'。如果'script2'中的最後一個命令是'echo',現在該退出「'了? – 2014-09-04 20:56:40
我考慮到了這一點。它不應該與正則表達式'^ exit'一起傳遞,因爲正則表達式只允許以退出後跟一個空格開始的命令。唯一的命令是'exit' – Pithikos 2014-09-04 21:04:38
看起來是一個很好的解決方案。我重新訪問了'man bash'的'Shell Variables'部分。我認爲你遇到了一個很好的解決方案。我唯一的好奇心就是'BASH_COMMAND'中描述的方式,具體來說,**它是在陷阱**時執行的命令。顯然它正在工作,但看到**這是在陷阱**之前執行的最後一個命令將是令人欣慰的。哦,我仍然喜歡它:) – 2014-09-04 21:16:39
不是我所知道的。你爲什麼想這樣做? – 2014-09-04 18:01:56
只需以不同於0的值退出以指示退出。 – choroba 2014-09-04 18:02:57
@EtanReisner假設我正在製作其他腳本的包裝。 – Pithikos 2014-09-04 18:04:43