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

Cannot get erlang escript exit code if the code is not 0

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

If the main/1 function in the script returns successfully,the exit status for the script is 0. If an exception is generated during execution, a short message is printed and the script terminates with exit status 127.

To return your own non-zero exit code, call halt(ExitCode), for example:

halt(1).

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

对我有用。让我们 运行 举个例子:

~ $ 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

听起来调用者是一个使用 set -e 的 shell 脚本,这意味着它会在任何命令 returns 非零退出代码时退出。

您可以做的一件事是将调用包装在 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