拿这个脚本
#!/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,它将运行两次。我怎样才能解决这个问题?
拿这个脚本
#!/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,它将运行两次。我怎样才能解决这个问题?
做级联陷阱。exit 127
将运行EXIT
陷阱并将退出代码设置为 127,所以你可以说
#!/bin/sh
fd () {
echo Hello world
# No explicit exit here!
}
trap fd EXIT
trap 'exit 127' INT
我记得在为您的问题苦苦挣扎多年后,从其他人的脚本中学到了这一点。在那之后,我注意到一些教程确实解释了这种技术。但它没有在例如 Bash 手册页恕我直言中清楚地记录。(或者不是我需要它的时候。也许有些事情在 15 年内不会改变...... :-)
灵感来自pst 的评论
fd ()
{
echo Hello world
trap - EXIT INT
exit
}
重新定义陷阱默认值呢?
#!/bin/sh
fd () {
echo Hello world
trap - EXIT
exit 127
}
trap fd INT EXIT