退出

2013-01-11 104 views
10

把這個腳本退出

#!/bin/sh 

fd() 
{ 
    echo Hello world 
    exit 
} 

trap fd EXIT INT 

for g in {1..5} 
do 
    echo foo 
    sleep 1 
done 

我想fd火一次,無論是從控制-C或腳本是否正常退出。但是,如果您擊中Control-C,它將運行兩次。我怎樣才能解決這個問題?

回答

9

做級聯陷阱。 exit 127將運行EXIT陷阱和退出代碼設置爲127,這樣你就可以用各種變通方法奮力您的問題幾年後說

#!/bin/sh 

fd() { 
    echo Hello world 
    # No explicit exit here! 
} 

trap fd EXIT 
trap 'exit 127' INT 

我記得我從其他人的腳本學習這一點。之後,我注意到一些教程解釋了這種技術。但它沒有在例如Bash手冊頁恕我直言。 (或不是當我需要它時,也許有些東西在15年內不會改變...... :-)

+0

很好,+1 :) – drAlberT

0

在重新定義陷阱默認值方面呢?

#!/bin/sh 

fd() { 
    echo Hello world 
    trap - EXIT 
    exit 127 
} 

trap fd INT EXIT