如果代码不是0,则无法获取erlang escript退出代码
根据erlang的手册: 如果脚本中的main/1函数成功返回,则脚本的退出状态为0。如果在执行期间生成异常,则打印一条短消息,脚本终止,退出状态为127 要返回您自己的非零退出代码,请调用halt(退出代码),例如: halt(1). 暂停(1)。如果代码不是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,并且$
但是,我调用了
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'。