如果代码不为0,则无法获取erlang escript退出代码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果代码不为0,则无法获取erlang 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
下面的命令正在运行。我能为此做些什么?
答案
听起来调用者是使用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 $? # 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
以上是关于如果代码不为0,则无法获取erlang escript退出代码的主要内容,如果未能解决你的问题,请参考以下文章