陷阱火灾后退出

10 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
Run Code Online (Sandbox Code Playgroud)

我想fd从Control-C或者脚本正常退出时触发一次.但是,如果你点击Control-C它会运行两次.我怎样才能解决这个问题?

tri*_*eee 10

做级联陷阱.exit 127将运行EXIT陷阱并将退出代码设置为127,所以你可以说

#!/bin/sh

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

trap fd EXIT
trap 'exit 127' INT
Run Code Online (Sandbox Code Playgroud)

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