陷阱火灾后退出

时间:2013-01-11 09:35:04

标签: bash shell-trap

采取此脚本

#!/bin/sh

fd ()
{
  echo Hello world
  exit
}

trap fd EXIT INT

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

我希望fd从Control-C触发一次,或者脚本正常退出。但是,如果你点击Control-C它会运行两次。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:10)

做级联陷阱。 exit 127将运行EXIT陷阱并将退出代码设置为127,因此您可以说

#!/bin/sh

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

trap fd EXIT
trap 'exit 127' INT

我记得多年来在为您的问题解决各种问题之后,从其他人的脚本中学到了这一点。在那之后,我注意到一些教程确实解释了这种技术。但是没有明确记录在例如Bash手册页恕我直言。 (或者不是我需要的时候。也许有些事情在15年内没有改变......: - )

答案 1 :(得分:0)

重新定义陷阱默认值怎么样?

#!/bin/sh

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

trap fd INT EXIT