【发布时间】:2014-12-04 15:57:18
【问题描述】:
我的t.ms 文件包含:
interface(prettyprint=0): kernelopts(assertlevel=1):
ASSERT(1<1):
ASSERT(2<2):
当我跑步时:
maple -q t.ms; echo $?
我明白了:
Error, assertion failed
Error, assertion failed
0
当我跑步时:
maple -e 2 -q t.ms; echo $?
我明白了:
Error, assertion failed
0
我想得到:
Error, assertion failed
4
也就是说,我希望 Maple 在第一个失败的断言时以非零退出状态退出。 (我不在乎退出代码是 1 还是其他任何值,只要它不为零即可。我从 documentation 得到数字 4,与 errorbreak 相关)我如何得到它?
【问题讨论】:
-
1的退出代码表示 maple 无法初始化/启动。为什么要使用它?退出代码将向操作系统报告以确定 为什么 maple 关闭。在您的示例中,枫树正在正确运行和关闭。 Looks like you can return your own withquit(n),done(n), orstop(n), though. -
您可以使用
-e 2选项让 maple 在第一个未捕获的错误(在这种情况下由第一个失败的断言引起)时退出。 -
@acer:感谢
-e 2。它确实会导致提前退出,但退出代码为 0。我已经更新了我的问题以反映这一点。如何使用非零退出代码提前退出? -
@admdrew:我不关心实际的退出代码,只要它不为零。我想要非零的原因是为了让调用进程可以轻松区分 Maple 是否已成功运行端到端命令(0 退出代码),或者是否存在任何失败(非零退出代码),包括断言失败。
-
@pts 你需要
ASSERT吗?你可以try/catch代替你的条件,并在失败时触发quit(4)吗?