2017-09-26 3 views
7

Ich möchte eine ganze Datei mit JShell laufen wie:Wie starte ich eine JShell-Datei?

$ jshell my-jshell-skript.java 

Wo z.B. Der Inhalt meiner my-jshell-skript.java ist 40 + 2;.

Oder alternativ eine ausführbare Datei wie:

#!/usr/bin/jshell 
40 + 2 

Ist das jetzt möglich oder muß ich noch die alte Art und Weise über eine Java-Main-Klasse nehmen?

Edit 1: Windows-Problem

Unter Windows gibt es noch keine Lösung für mich:

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 beginnt völlig meine Datei zu ignorieren. Ist es ein Fehler?

Edit 2: Lösung für Windows-Problem

Es stellte sich heraus, dass es der Inhalt meiner foo ist. Scheint, wie 1 + 1 nur "on the fly" funktioniert, lesen Sie nicht aus einer Datei:

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> 
+0

Mann, das so ärgerlich ist. All dieser Hype für jshell und es kann 'jshell helloworld.java' nicht laufen lassen. –

Antwort

2

Sie können über die Pipeline die Zeichenfolge JShell:

echo 1 + 2 | jshell 

Beispiel:

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

jshell> 1 + 2 
$1 ==> 3 

:/# 

Or , aus einer Datei:

cat myfile | jshell 

Wobei myfile die Zeile "1 + 2" enthält.

+0

Dies funktioniert nicht in Cygwin: '' ' peter @ AB4745 /cygdrive/c/JDKs/jdk9.0.0.0_x64/bin $ echo 2 + 3 | jshell.exe | Willkommen bei JShell - Version 9 | Für eine Einführung geben Sie Folgendes ein:/help intro jshell> '' ' – user470370

6

können Sie erstellen eine Jshell script Datei mit dem Namen some.jsh mit diesen Aussagen und an der Eingabeaufforderung von wo aus Sie jshell ausführen, führen Sie es als: -

jshell /path/to/some.jsh 

Auf einem Mac OS X, ich etwas tun würde, wie:

enter image description here

+0

Gibt es eine Möglichkeit, den interaktiven Modus nach Abschluss des Skripts zu unterdrücken? – pnewhook

+2

@pnewhook Sie können '/ exit' aus dem Skript heraus verwenden. – nullpointer

0

JShell ist nicht eine Java-Klasse laufen direkt gemeint. Wenn Sie eine Java-Klasse ausführen möchten, müssen Sie dies immer noch auf die alte Art tun - java <your-class-name>.

Vom docs,

Das Java-Shell-Tool (JShell) ist ein interaktives Tool, um die Java-Programmiersprache für das Lernen und Java-Code Prototyping. JShell ist eine Read-Evaluate-Print-Schleife (REPL), die Deklarationen, Anweisungen und Ausdrücke bei ihrer Eingabe auswertet und sofort die Ergebnisse anzeigt.

Gemäß diesem Zitat ist JShell zum Ausführen oder Ausprobieren einzelner Java-Anweisungen gedacht.In der traditionellen Java-Art müssen Sie ein vollständiges Java-Programm schreiben, bevor Sie es ausführen und die Ergebnisse sehen können. Aber JShell erlaubt es Ihnen, die Java-Anweisungen auszuprobieren, ohne dass Sie die vollständige eigenständige Java-Anwendung erstellen müssen.

Also die kurze Antwort auf Ihre Frage ist, dass, nein, Sie können nicht Standalone-Java-Anwendungen wie jshell my-jshell-skript.java aufrufen. Sie können jedoch eine Skriptdatei aufrufen, die einzelne JShell-Befehle oder Java-Anweisungen enthält. Also, wenn Sie alle Anweisungen von Ihrem Java-Programm zu kopieren und sie in einem JShell Skript einfügen, können Sie das Skript wie ausführen:

% jshell my-jshell-skript.jsh

Aber das ist nicht ganz dasselbe wie eine eigenständige Java-Anwendung ausgeführt wird.