web-dev-qa-db-ja.com

JShellファイルを実行する方法は?

次のような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用のソリューション-問題

それは私のfooの内容であることが判明しました。 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>
11
user470370

JShellは、Javaクラスを直接実行するためのものではありません。 Javaクラスを実行する場合でも、古い方法で実行する必要があります-Java <your-class-name>

docs から、

Javaシェルツール(JShell)は、Javaプログラミング言語を学習してJavaコードをプロトタイピングするためのインタラクティブなツールです。 JShellは、Read-Evaluate-Print Loop(REPL)であり、宣言、ステートメント、および式が入力されるとそれらを評価し、結果をすぐに表示します。

この引用によると、JShellは個々のJavaステートメントを実行または試行するためのものです。従来のJavaの方法では、実行して結果を確認する前に、完全なJavaプログラムを作成する必要があります。ただし、JShellを使用すると、完全なスタンドアロンのJavaアプリケーションを構築しなくても、Javaステートメントを試すことができます。

したがって、あなたの質問に対する簡単な答えは、いいえ、jshell my-jshell-skript.JavaのようなスタンドアロンのJavaアプリケーションを呼び出すことはできないということです。ただし、個々のJShellコマンドまたはJavaステートメントを含むスクリプトファイルを呼び出すことはできます。したがって、JavaプログラムからすべてのステートメントをコピーしてJShellスクリプトに貼り付けると、次のようなスクリプトを実行できます。

% jshell my-jshell-skript.jsh

ただし、これはスタンドアロンのJavaアプリケーションを実行することとはまったく同じではありません。

1
VHS

これらのステートメントを使用してsome.jshという名前の Jshellスクリプト ファイルを作成し、コマンドプロンプトでjshellを実行して、次のように実行できます。

jshell /path/to/some.jsh

MacOSXでは、次のようなことをします。

enter image description here

5
Naman

文字列を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」という行が含まれています。

2
Maroun

Jshellでは、次のコマンドを発行して、現在のスニペットをファイルに保存できます。

/save Filename

同様に、以下を発行することにより、ファイルを現在のコンテキスト/セッションにロードできます。

/open Filename

これがそのような例の1つです。

|  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" }
1
Sudip Bhandari

jshellフィードバックモードでconciseを起動し、必要なコンテンツをフィルタリングします-

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

出力:42

詳細はこちら- 実行方法Java jshellコマンドをシェルまたはWindowsコマンドラインからインラインとして

1
Rahul Sharma

Windowsで、jshファイルの詳細な出力を確認する

type file.jsh | jshell -v

実行時の問題jshell file.jsh

D:\>type file.jsh
3 + 5

D:\>jshell file.jsh
|  Welcome to JShell -- Version 13.0.2
|  For an introduction type: /help intro

jshell>

回避策:

D:\>type file.jsh
3 + 5

D:\>type file.jsh | jshell -v
|  Welcome to JShell -- Version 13.0.2
|  For an introduction type: /help intro

jshell> $1 ==> 8
|  created scratch variable $1 : int

jshell>

注:ファイルには、最後の行の後に空白行(/ n)を含める必要があります。そうしないと、最後の行が実行されません。

0
Senthil