【发布时间】:2015-05-29 00:47:20
【问题描述】:
我希望只有在整个 shell 脚本终止时才执行陷阱。我编写了以下 shell 脚本。
foo()
{
echo begin foo
trap 'echo TRAP' EXIT
echo end foo
}
bar()
{
echo begin bar
echo end bar
}
foo
bar
在我拥有的 AIX 5.3 系统上,它以 bash 和 ksh93 生成所需的输出。在下面的示例中,陷阱是要执行的最后一件事。
# bash foo.sh
begin foo
end foo
begin bar
end bar
TRAP
# ksh93 foo.sh
begin foo
end foo
begin bar
end bar
TRAP
但在 ksh 上,当函数 foo 退出时执行陷阱。
# ksh foo.sh
begin foo
end foo
TRAP
begin bar
end bar
如何仅在 ksh 中的脚本终止时执行我的陷阱?
【问题讨论】:
-
在函数外声明。
-
为什么你需要在这么多不同的shell下运行你的脚本?如果它在 ksh93 和 bash 中产生所需的结果,为什么不坚持使用其中一种解释器呢?
-
在 ksh93、bash 和 ksh88 下运行脚本有点像通过以下方式运行 C 程序一个 C++ 编译器。有些事情可能会奏效,有些事情可能会失败。 ksh88 和 ksh93 实现的核心语言大致相同,但也有区别。在此处查看列表:opensource.apple.com/source/ksh/ksh-13/ksh/src/cmd/ksh93/…
标签: shell compatibility ksh