我正在开发一个管理一些陷阱的脚本。一开始我只用这段代码管理 INT 和 SIGTSTP 并且效果很好:
#!/bin/bash
function capture_traps() {
echo -e "\nDoing something on exit"
exit 1
}
trap capture_traps INT
trap capture_traps SIGTSTP
read -p "Script do its stuff here and we use read for the example we pause for time to generate trap event"
exit 0
然后我尝试添加我想要管理的新陷阱,即 SIGINT 和 SIGHUP。在第一个实例中,我这样做了(这是有效的):
#!/bin/bash
function capture_traps() {
echo -e "\nDoing something on exit"
exit 1
}
trap capture_traps INT
trap capture_traps SIGTSTP
trap capture_traps SIGINT
trap capture_traps SIGHUP
read -p "Script do its stuff here and we use read for the example we pause for time to generate trap event"
exit 0
然后,我决定根据陷阱在退出时做不同的事情,我不想为每个人创建不同的功能。我知道在 bash 中,您可以使用命名法遍历函数上的参数for item in $@; do
,所以我尝试了,但尝试区分陷阱类型似乎不起作用。我制作了这个不起作用的代码。
#!/bin/bash
function capture_traps() {
for item in $@; do
case ${item} in
INT|SIGTSTP)
echo -e "\nDoing something on exit"
;;
SIGINT|SIGHUP)
echo -e "\nDoing another thing even more awesome"
;;
esac
done
exit 1
}
trap capture_traps INT SIGTSTP SIGINT SIGHUP
read -p "Script do its stuff here and we use read for the example we pause for time to generate trap event"
exit 0
有什么帮助吗?必须有一种方法来改进我的代码,只对所有陷阱使用一个函数,但我不知道如何......