2

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

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

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

停止(1)。

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

4

2 回答 2

1

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

您可以做的一件事是将调用包装在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
于 2018-09-13T11:57:40.610 回答
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
于 2018-09-13T11:46:08.817 回答