陷阱火灾后退出(Exit after trap fires)

2019-07-18 02:40发布

把这个脚本

#!/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将运行两次。 我怎样才能解决这个问题?

Answer 1:

做级联陷阱。 exit 127将运行EXIT陷阱和退出代码设置为127,这样你就可以说

#!/bin/sh

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

trap fd EXIT
trap 'exit 127' INT

我记得有不同的解决方法奋力您的问题几年后,这个学习别人的脚本。 在那之后,我注意到,一些教程做解释了这种技术。 但它不是如明确记载Bash的手册页恕我直言。 (或者它是不是当我需要它。也许有些事情没有在15年内改变... :-)



Answer 2:

怎么样在重新界定陷阱默认?

#!/bin/sh

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

trap fd INT EXIT


文章来源: Exit after trap fires