我正在尝试学习如何在bash中使用trap。我在ubuntu ohmyzsh上。
这是一个测试用例,但是我希望使用在退出时调用的函数调用时传递的参数来调用函数。现在,它甚至没有在陷阱中调用该函数。
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%
我注意到这个答案使用了SIGINT并在trap调用的函数中使用exit,但是它关闭了终端,否则不会停止循环。所以仍然很困惑,这对我的例子来说是无济于事的。
首先,与zsh
是不同的外壳bash
。尽管许多事情是相似的,但其他几件事是不同的。
就像在SIGINT或SIGTERM的情况下需要执行trap EXIT吗?与bash不同,收到SIGINT时,EXIT陷阱不会在zsh中运行。您需要SIGINT
改用。
另请注意,xecho
必须显式调用exit
:
#!/usr/bin/zsh
xtest() {
trap "xecho ${1}" INT
echo 'start'
while :; do echo 'Hit CTRL+C'; sleep 1; done
}
xecho() {
echo "done $1"
exit 0
}
xtest
在zsh
该EXIT
陷阱将在脚本的定期出口在主脚本和/或当在一个函数定义当一个函数的出口限定为当被调用:
#!/usr/bin/zsh
trap "xecho ${0} ${1}" EXIT
xtest() {
trap "xecho ${0} ${1}" EXIT
echo "do something"
}
xecho() {
echo "${1} ${2} done"
}
xtest foo
xtest bar
echo "main script ending"
输出:
do something
xtest foo done
do something
xtest bar done
main script ending
script.zsh done
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句