如何 运行 一个 JShell 文件?
How to run a JShell File?
我想用 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
只工作 "on the fly",而不是从文件中读取:
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>
您可以将字符串通过管道传输到 JShell:
echo 1 + 2 | jshell
示例:
:/# echo 1 + 2 | jshell
| Welcome to JShell -- Version 9
| For an introduction type: /help intro
jshell> 1 + 2
==> 3
:/#
或者,从文件中:
cat myfile | jshell
其中 myfile
包含行“1 + 2”。
您可以使用这些语句创建一个名为 some.jsh
的 Jshell script 文件,然后在 运行 jshell
的命令提示符下执行它:-
jshell /path/to/some.jsh
在 MacOSX 上,我会做类似的事情:
JShell
并不意味着直接 运行 一个 Java class。如果你想 运行 a java class,你仍然需要用老方法 - java <your-class-name>
。
来自docs、
The Java Shell tool (JShell) is an interactive tool for learning the
Java programming language and prototyping Java code. JShell is a
Read-Evaluate-Print Loop (REPL), which evaluates declarations,
statements, and expressions as they are entered and immediately shows
the results.
根据此引用,JShell 用于 运行 宁或尝试单个 Java 语句。在传统的 java 方式中,您必须先编写完整的 Java 程序,然后才能 运行 它并查看结果。但是 JShell 允许您尝试 Java 语句而无需构建完整的独立 java 应用程序。
所以对您的问题的简短回答是,不,您不能像 jshell my-jshell-skript.java
这样调用独立的 java 应用程序。但是,您可以调用包含单独的 JShell 命令或 Java 语句的脚本文件。因此,如果您从 Java 程序中复制所有语句并将它们粘贴到 JShell 脚本中,您可以 运行 脚本如下:
% jshell my-jshell-skript.jsh
但这与 运行 独立 java 应用程序不太一样。
在concise
反馈模式下启动jshell
并过滤所需内容-
$echo '40 + 2' | jshell --feedback concise | sed -n '2p' |sed -En 's/[^>]*>(.+)//gp'
输出: 42
此处有更多详细信息-
在 jshell 中,您可以通过发出以下命令将当前片段保存到文件中:
/save Filename
同样,您可以通过发出以下命令将文件加载到当前 context/session:
/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);
==> "[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" }
在 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> ==> 8
| created scratch variable : int
jshell>
注意:文件最后一行后应包含一个空行 (/n),否则最后一行不会被执行
管道的使用可以通过“连字符”选项实现,在最初的 jshell 版本中没有。
echo 'System.out.print(1 + 2)' | jshell -
https://docs.oracle.com/en/java/javase/11/tools/jshell.html
https://bugs.openjdk.java.net/browse/JDK-8187439
我想用 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
只工作 "on the fly",而不是从文件中读取:
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>
您可以将字符串通过管道传输到 JShell:
echo 1 + 2 | jshell
示例:
:/# echo 1 + 2 | jshell
| Welcome to JShell -- Version 9
| For an introduction type: /help intro
jshell> 1 + 2
==> 3
:/#
或者,从文件中:
cat myfile | jshell
其中 myfile
包含行“1 + 2”。
您可以使用这些语句创建一个名为 some.jsh
的 Jshell script 文件,然后在 运行 jshell
的命令提示符下执行它:-
jshell /path/to/some.jsh
在 MacOSX 上,我会做类似的事情:
JShell
并不意味着直接 运行 一个 Java class。如果你想 运行 a java class,你仍然需要用老方法 - java <your-class-name>
。
来自docs、
The Java Shell tool (JShell) is an interactive tool for learning the Java programming language and prototyping Java code. JShell is a Read-Evaluate-Print Loop (REPL), which evaluates declarations, statements, and expressions as they are entered and immediately shows the results.
根据此引用,JShell 用于 运行 宁或尝试单个 Java 语句。在传统的 java 方式中,您必须先编写完整的 Java 程序,然后才能 运行 它并查看结果。但是 JShell 允许您尝试 Java 语句而无需构建完整的独立 java 应用程序。
所以对您的问题的简短回答是,不,您不能像 jshell my-jshell-skript.java
这样调用独立的 java 应用程序。但是,您可以调用包含单独的 JShell 命令或 Java 语句的脚本文件。因此,如果您从 Java 程序中复制所有语句并将它们粘贴到 JShell 脚本中,您可以 运行 脚本如下:
% jshell my-jshell-skript.jsh
但这与 运行 独立 java 应用程序不太一样。
在concise
反馈模式下启动jshell
并过滤所需内容-
$echo '40 + 2' | jshell --feedback concise | sed -n '2p' |sed -En 's/[^>]*>(.+)//gp'
输出: 42
此处有更多详细信息-
在 jshell 中,您可以通过发出以下命令将当前片段保存到文件中:
/save Filename
同样,您可以通过发出以下命令将文件加载到当前 context/session:
/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);
==> "[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" }
在 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> ==> 8
| created scratch variable : int
jshell>
注意:文件最后一行后应包含一个空行 (/n),否则最后一行不会被执行
管道的使用可以通过“连字符”选项实现,在最初的 jshell 版本中没有。
echo 'System.out.print(1 + 2)' | jshell -
https://docs.oracle.com/en/java/javase/11/tools/jshell.html
https://bugs.openjdk.java.net/browse/JDK-8187439