如果代码不为 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
根据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