如果代码不为0,则无法获取erlang escript退出代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果代码不为0,则无法获取erlang escript退出代码相关的知识,希望对你有一定的参考价值。

根据erlang http://erlang.org/doc/man/escript.html的手册:

如果脚本中的main / 1函数成功返回,则脚本的退出状态为0.如果在执行期间生成异常,则会打印一条短消息,并且脚本将以退出状态127终止。

要返回自己的非零退出代码,请调用halt(ExitCode),例如:

halt(1).

但是,我调用halt(1)将退出状态1返回给调用者,调用者无法获取退出代码,并且我的shell脚本中$ERTS_DIR/bin/escript myscript下面的命令没有运行。顺便说一句,如果myscript正常退出,则收到退出代码0,并且$ERTS_DIR/bin/escript myscript下面的命令正在运行。我能为此做些什么?

答案

听起来调用者是使用set -e的shell脚本,这意味着如果任何命令返回非零退出代码它将退出。

你可以做的一件事是将调用包装在if中:

if $ERTS_DIR/bin/escript myscript; then
    echo "the escript ran successfully"
else
    echo "the escript failed with exit code $?"
fi

如果你只想在失败时做一些特别的事情,请在前面放一个!

if ! $ERTS_DIR/bin/escript myscript; then
    echo "the escript failed"
fi
另一答案

这个对我有用。我们来举个例子:

~ $ echo $? # Using $? you can see last exit code in the shell
0

~ $ erl
Erlang/OTP 19 [erts-8.3] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V8.3  (abort with ^G)
1> halt(1).
~ $ echo $?
1

~ $ cat test.script 
-module(test).
-export([main/1]).

main(_) ->
    halt(127).


~ $ escript test.script
~ $ echo $?
127

以上是关于如果代码不为0,则无法获取erlang escript退出代码的主要内容,如果未能解决你的问题,请参考以下文章

如果类名是数字,则无法按类名获取元素

Panda 中的“如果不为 io 传入缓冲区或路径,则必须显式设置引擎”

如何调试无法启动的erlang应用程序

如何从 Erlang 中的对列表中获取元素

如果对象在 Java 中为空,则获取默认值

SQL 从 2 列中选择数据,如果它不为 NULL,则插入到视图中