我想用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>
5 回答
JShell
并不意味着直接运行Java类 . 如果你想运行一个java类,你仍然需要以旧的方式去做 -java <your-class-name>
.来自docs,
根据这句话,JShell用于运行或尝试单个Java语句 . 在传统的java方式中,您必须先编写完整的Java程序,然后才能运行它并查看结果 . 但JShell允许您尝试Java语句,而无需构建完整的独立Java应用程序 .
因此,对您的问题的简短回答是,不,您不能调用像
jshell my-jshell-skript.java
这样的独立Java应用程序 . 但是,您可以调用包含单个JShell命令或Java语句的脚本文件 . 因此,如果从Java程序复制所有语句并将其粘贴到JShell脚本,则可以运行以下脚本:% jshell my-jshell-skript.jsh
但这与运行独立的Java应用程序并不完全相同 .
您可以使用这些语句创建名为Jshell script的Jshell script文件,并在命令提示符处运行
jshell
,执行它: -在MacOSX上,我会做类似的事情:
在jshell中,您可以通过发出以下命令将当前片段保存到文件中:
同样,您可以通过发出以下命令将文件加载到当前上下文/会话中:
这是一个这样的例子:
在
concise
反馈模式下启动jshell
并过滤所需内容 -output:
42
更多细节 - How to execute java jshell command as inline from shell or windows commandLine
您可以将字符串传递给JShell:
例:
或者,从文件:
myfile
包含"1 + 2"行 .