Невозможно получить код завершения erlang escript, если код не равен 0
Согласно руководству по erlang http://erlang.org/doc/man/escript.html:
Если функция main/1 в сценарии возвращается успешно, состояние выхода для сценария равно 0. Если во время выполнения генерируется исключение, печатается короткое сообщение, и сценарий завершается со статусом выхода 127.
Чтобы вернуть свой ненулевой код выхода, вызовите halt(ExitCode), например:
Остановка (1).
но я позвонил halt(1)
чтобы вернуть состояние выхода 1 вызывающей стороне, вызывающая сторона не может получить код выхода, и команды под $ERTS_DIR/bin/escript myscript
у меня в оболочке скрипт не работает. кстати, если myscript завершает работу нормально, код выхода 0 принимается, а команды ниже $ERTS_DIR/bin/escript myscript
бежит. что я могу сделать для этого?
2 ответа
Похоже, что вызывающая сторона является сценарием оболочки, использующим 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
Меня устраивает. Давайте запустим пример:
~ $ 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