2017-09-26 49 views
7

我想运行与JShell整个文件,如:如何运行JShell文件?

$ jshell my-jshell-skript.java 

例如在哪里我的my-jshell-skript.java的内容是40 + 2;

或可选择地像一个可执行文件:

#!/usr/bin/jshell 
40 + 2 

现在这是可能的,或者我还是要在一个Java主类的老路上?

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

人,这是很讨厌。所有对jshell的炒作和它不能运行'jshell helloworld.java'。 –

回答

2

可以通过管道将字符串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”。

+0

这不适用于Cygwin: ''' peter @ AB4745 /cygdrive/c/JDKs/jdk9.0.0.0_x64/bin $ echo 2 + 3 | jshell.exe |欢迎来到JShell - 版本9 |对于介绍类型:/帮助简介 jshell> ''' – user470370

6

您可以创建一个Jshell script文件名为some.jsh这些发言和从运行jshell命令提示符下,执行它: -

jshell /path/to/some.jsh 

在一个MacOSX的,我会做这样的事情:

enter image description here

+0

脚本完成后有没有办法抑制进入交互模式? – pnewhook

+2

@pnewhook你可以在脚本中使用'/ exit'。 – nullpointer

0

JShell并不意味着直接运行Java类。如果你想运行一个java类,你仍然需要以旧的方式去做 - java <your-class-name>

docs

Java的壳牌工具(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应用程序。