陷阱ERR奇怪的行为(无限循环)取决于函数的定义方式

时间:2014-11-29 16:36:01

标签: function shell unix ksh

希望有人可以帮忙解决这个问题 - 不确定这是否是ksh93的已知错误?

#!/bin/ksh93
_errorCheck()
{
        LINENO=$1
        print "Error on or near line $LINENO - please check error log"
        exit 1
}
trap '_errorCheck ${LINENO}' ERR

false

此输出:

 Error on or near line 10 - please check error log

但是......如果使用单词function而不是()来定义函数:

#!/bin/ksh93
function _errorCheck 
{
        LINENO=$1
        print "Error on or near line $LINENO - please check error log"
        exit 1
}
trap '_errorCheck ${LINENO}' ERR

false

然后输出:

Error on or near line 10 - please check error log
Error on or near line 10 - please check error log
Error on or near line 10 - please check error log
Error on or near line 10 - please check error log
Error on or near line 10 - please check error log
Error on or near line 10 - please check error log

似乎无限次......

任何人都可以解释这种行为吗?

根据要求: KSH_VER =版本M-12/28 / 93e

2 个答案:

答案 0 :(得分:1)

使用function f {...}f() {...}实际上在ksh中是不同的。您可以检查该答案,这很好地说明了您正在尝试什么。 https://unix.stackexchange.com/questions/73750/difference-between-function-foo-and-foo

答案 1 :(得分:0)

您可以添加一行

trap - ERR

在任一函数的顶部,在第一次触发后重置陷阱。

对我来说,第二个功能显示了预期的行为。

无论如何,你进行了实验,发现了一些有用的东西。这一切都很重要。