Невозможно получить код завершения erlang escript, если код не равен 0 - PullRequest
0 голосов
/ 13 сентября 2018

Согласно руководству erlang http://erlang.org/doc/man/escript.html:

Если функция main / 1 в сценарии возвращается успешно, состояние выхода для сценария равно 0. Если во время выполнения генерируется исключение, печатается короткое сообщение, и сценарий завершается со статусом выхода 127.

Чтобы вернуть собственный ненулевой код выхода, вызовите halt (ExitCode), например:

halt(1).

но я позвонил halt(1), чтобы вернуть состояние завершения 1 вызывающей стороне, вызывающая сторона не может получить код выхода, и команды ниже $ERTS_DIR/bin/escript myscript в моем сценарии оболочки не выполняются. Кстати, если myscript завершает работу нормально, код выхода 0 принимается, и команды ниже $ERTS_DIR/bin/escript myscript выполняются. что я могу сделать для этого?

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Звучит так, будто вызывающий является сценарием оболочки, использующим 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
0 голосов
/ 13 сентября 2018

Это работает для меня.Давайте запустим пример:

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