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

如果代码不是0,则无法获取erlang escript退出代码,erlang,exit,escript,Erlang,Exit,Escript,根据erlang的手册: 如果脚本中的main/1函数成功返回,则脚本的退出状态为0。如果在执行期间生成异常,则打印一条短消息,脚本终止,退出状态为127 要返回您自己的非零退出代码,请调用halt(退出代码),例如: halt(1). 暂停(1)。 但是,我调用了halt(1)将退出状态1返回给调用方,调用方无法获取退出代码,并且我的shell脚本中$ERTS_DIR/bin/escript myscript下面的命令未运行。顺便说一下,如果myscript正常退出,则会收到退出代码0,并且$

根据erlang的手册:

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

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

halt(1). 暂停(1)。
但是,我调用了
halt(1)
将退出状态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脚本,这意味着如果任何命令返回非零退出代码,它将退出

您可以做的一件事是在
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$?'。问题是'set-e'。