我正在学习如何在bash中使用trap,我正在使用ubuntu ohmyzsh。
这是一个测试用例,但是我希望调用一个函数,该函数的参数是调用函数时传入的参数,而函数在退出时被调用,现在它甚至不调用trap中的函数。
xtest() {
trap 'xecho' EXIT
echo 'start'
while :; do echo 'Hit CTRL+C'; sleep 1; done
}
xecho() {
echo "done $1"
}
我只是
$ xtest foo
start
Hit CTRL+C
Hit CTRL+C
^C%
我注意到这个answer使用SIGINT,并且在trap调用的函数中使用exit,但是然后它关闭了终端,否则它不会停止循环,所以仍然很困惑,并且它对我的例子没有帮助,让参数foo在break上回显。
2条答案
按热度按时间yrwegjxp1#
首先,
zsh
与bash
是不同的shell,虽然有许多相似之处,但还有一些不同之处。正如Is trap EXIT required to execute in case of SIGINT or SIGTERM received?中提到的,当接收到SIGINT时,EXIT陷阱不会在zsh中运行,这与bash不同。您需要使用
SIGINT
来代替。还要注意,
xecho
必须显式调用exit
:在
zsh
中,EXIT
陷阱将在主脚本中定义的脚本正常退出时调用,和/或在函数中定义的函数退出时调用:输出:
qoefvg9y2#
非常简单,就像正常调用函数一样调用它
我的脚本.sh:
bash客户端: