Как выполнить команду java jshell как встроенную из командной строки оболочки или windows

ел бы запустить весь файл с помощью JShell, например:

$ jshell my-jshell-skript.java

Где например содержание моегоmy-jshell-skript.java является40 + 2;.

Или, альтернативно, исполняемый файл, такой как:

#!/usr/bin/jshell
40 + 2

Возможно ли это сейчас, или мне все же придется идти по старому пути по сравнению с Java-Main-Class?

Редактировать 1: Windows-проблема

В Windows до сих пор нет решения для меня:

C:\JDKs\jdk9.0.0.0_x64\bin>type foo.jsh
1 + 1

C:\JDKs\jdk9.0.0.0_x64\bin>jshell.exe foo.jsh
|  Welcome to JShell -- Version 9
|  For an introduction type: /help intro

jshell> /exit
|  Goodbye

C:\JDKs\jdk9.0.0.0_x64\bin>

JShell начинает полностью игнорировать мой файл. Это ошибка?

Редактировать 2: Решение для Windows-проблемы

Оказывается, это содержание моего фу. Похоже на1 + 1 работает только "на лету", а не из файла:

C:\JDKs\jdk9.0.0.0_x64\bin>type foo.jsh
System.out.println("foo");

C:\JDKs\jdk9.0.0.0_x64\bin>jshell.exe foo.jsh
foo
|  Welcome to JShell -- Version 9
|  For an introduction type: /help intro

jshell> /exit
|  Goodbye

C:\JDKs\jdk9.0.0.0_x64\bin>
 Sridhar-Sarnobat17 окт. 2017 г., 01:52
Чувак, это так раздражает. Все это ажиотаж для jshelljshell helloworld.java.

Ответы на вопрос(5)

Вы можете создатьJshell скрипт файл с именемsome.jsh с этими утверждениями и в командной строке, откуда вы запускаетеjshellвыполните это как:

jshell /path/to/some.jsh

На MacOSX я бы сделал что-то вроде:

 Naman20 окт. 2017 г., 23:24
@pnewhook Вы можете использовать/exit изнутри сценария.
 pnewhook20 окт. 2017 г., 20:16
Есть ли способ запретить вход в интерактивный режим после завершения сценария?

запускjshell вconcise Режим обратной связи и фильтрация необходимого контента-

$echo '40 + 2' | jshell --feedback concise | sed -n '2p' |sed -En 's/[^>]*>(.+)/\1/gp'

выход: 42

Подробнее здесьКак выполнить команду java jshell как встроенную из командной строки оболочки или windows

Вы можете передать строку в JShell:

echo 1 + 2 | jshell

Пример:

:/# echo 1 + 2 | jshell
|  Welcome to JShell -- Version 9
|  For an introduction type: /help intro

jshell> 1 + 2
$1 ==> 3

:/#

Или из файла:

cat myfile | jshell

гдеmyfile содержит строку "1 + 2".

 user47037026 сент. 2017 г., 14:50
Это не работает в Cygwin: `` `peter @ AB4745 /cygdrive/c/JDKs/jdk9.0.0.0_x64/bin $ echo 2 + 3 | jshell.exe | Добро пожаловать в JShell - Версия 9 | Для введения введите: / help intro jshell> `` `

/save Filename

Аналогично, вы можете загрузить файл в текущий контекст / сеанс, выполнив:

/open Filename

Вот один из таких примеров:

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

jshell> String[] names={"nameone","nametwo"}
names ==> String[2] { "nameone", "nametwo" }

jshell> Arrays.toString(names);
$2 ==> "[nameone, nametwo]"

jshell> /save myExample

jshell> %                                                                                                                                             sudipbhandari at sysadm-Latitude-5480 in ~                                                                                                      18:22
> jshell
|  Welcome to JShell -- Version 9.0.7.1
|  For an introduction type: /help intro

jshell> names
|  Error:
|  cannot find symbol
|    symbol:   variable names
|  names
|  ^---^

jshell> /open myExample

jshell> names
names ==> String[2] { "nameone", "nametwo" }
Решение Вопроса

JShell не предназначен для прямого запуска Java-класса. Если вы хотите запустить Java-класс, вам все равно нужно сделать это по-старому -java <your-class-name>.

Издокументы,

Инструмент Java Shell (JShell) - это интерактивный инструмент для изучения языка программирования Java и создания прототипов кода Java. JShell - это цикл чтения-оценки-печати (REPL), который оценивает объявления, операторы и выражения по мере их ввода и сразу же показывает результаты.

Согласно этой цитате, JShell предназначен для запуска или опробования отдельных операторов Java. В традиционном Java-режиме вы должны написать полноценную Java-программу, прежде чем сможете ее запустить и увидеть результаты. Но JShell позволяет вам опробовать операторы Java без необходимости создавать полностью автономное Java-приложение.

Таким образом, краткий ответ на ваш вопрос заключается в том, что нет, вы не можете называть отдельные приложения Java, такие какjshell my-jshell-skript.java, Однако вы МОЖЕТЕ вызвать файл сценария, который содержит отдельные команды JShell или операторы Java. Поэтому, если вы скопируете все операторы из вашей Java-программы и вставите их в скрипт JShell, вы можете запустить скрипт следующим образом:

% jshell my-jshell-skript.jsh

Но это не совсем то же самое, что запуск автономного Java-приложения.

Ваш ответ на вопрос