Выйти из jshell с кодом ошибки

Как мне /exit сеанс jshell с ненулевым кодом ошибки ?

  • /exit возвращает: Процесс завершен с кодом выхода 0
  • /exit 1 возвращает: Процесс завершен с кодом выхода 0
  • throw new Error("1") выдает: java.lang.Error throwed: 1 at (#24:1)` и процесс завершен с кодом выхода 0
  • System.exit(1) выдает: Движок состояний остановлен. Восстановите определения с помощью: /reload -restore ... и сеанс jshell не будет завершен.

Команда bash, например set -e, недоступна.


person Sormuras    schedule 18.06.2017    source источник
comment
В системе отслеживания ошибок JDK появилась проблема: bugs.openjdk.java.net/browse/ JDK-8185840   -  person Sormuras    schedule 15.08.2017
comment
Верно, это улучшение описано в JDK-8185840, которое мы планируем исправить в следующем выпуске JDK 18.3 (также известном как JDK 10).   -  person Robert Field    schedule 21.10.2017


Ответы (1)


Теперь JShell поставляется с JDK 10, а позже представила новую версию /exit, которая принимает необязательный фрагмент в качестве аргумента. Этот фрагмент оценивается как код ошибки, который будет возвращен вызывающему процессу. См. http://mail.openjdk.java.net/pipermail/kulla-dev/2017-November/002129.html для получения подробной информации.

Вот текст справки для новых команд /exit с использованием jdk-10+ea-33:

|  Welcome to JShell -- Version 10
|  For an introduction type: /help intro

jshell> /help exit
|
|  /exit
|
|  Leave the jshell tool.  No work is saved.
|  Save any work before using this command
|
|  /exit
|       Leave the jshell tool.  The exit status is zero.
|
|  /exit <integer-expression-snippet>
|       Evaluate the snippet.  If the snippet fails or is not an integer expression,
|       display the error.  Otherwise leave the jshell tool with the
|       value of the expression as the exit status

jshell> /exit 123
|  Goodbye (123)

Примечание для JDK 9: Вы не можете использовать /exit для выхода из сеанса jshell в JDK 9 с ненулевым кодом ошибки. См. https://bugs.openjdk.java.net/browse/JDK-8185840 подробности.

person Sormuras    schedule 15.08.2017