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

时间:2018-09-13 10:31:40

标签: erlang exit 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下的命令正在运行。我该怎么办?

2 个答案:

答案 0 :(得分:1)

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

您可以做的一件事是将通话包装在[rules][0][id]:1, [rules][0][field]:1, [valid]:true, [IsActive]:true public class FilterRule { public bool IsActive { get; set; } public string Field { get; set; } public string Id { get; set; } public List<FilterRule> Rules { get; set; } public string Value { get; set; } } 中:

set -e

如果您只想对失败做一些特别的事情,请在前面放一个if

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

答案 1 :(得分:0)

对我有用。让我们运行一个示例:

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