退出

2013-01-11 70 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