Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何运行JShell文件?_Java_Java 9_Jshell - Fatal编程技术网

Java 如何运行JShell文件?

Java 如何运行JShell文件?,java,java-9,jshell,Java,Java 9,Jshell,我希望使用JShell运行整个文件,如: $ jshell my-jshell-skript.java 例如,我的myjshell skcript.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\j

我希望使用JShell运行整个文件,如:

$ jshell my-jshell-skript.java
例如,我的
myjshell skcript.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>
cat myfile | jshell

您可以通过管道将字符串传输到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

:/#
或者,从文件:

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>
cat myfile | jshell
其中
myfile
包含行“1+2”。

您可以使用这些语句创建一个名为
some.jsh
的文件,并在运行
jshell
的命令提示符下,按以下方式执行该文件:-

jshell /path/to/some.jsh
在MacOSX上,我会执行以下操作:


JShell
并不意味着直接运行Java类。如果您想运行java类,您仍然需要用老方法来运行它-
java

JavaShell工具(JShell)是一个用于学习 Java编程语言和原型Java代码。JShell是一个 读取评估打印循环(REPL),该循环评估声明, 语句,以及输入并立即显示的表达式 结果

根据这段引文,JShell用于运行或尝试单个Java语句。按照传统的java方式,您必须先编写完整的java程序,然后才能运行它并查看结果。但是JShell允许您尝试Java语句,而无需构建完整的独立Java应用程序

因此,对您的问题的简短回答是,不,您不能调用独立的java应用程序,如
jshell my jshell skcript.java
。但是,您可以调用包含单个JShell命令或Java语句的脚本文件。因此,如果您复制Java程序中的所有语句并将它们粘贴到JShell脚本中,您可以像这样运行该脚本:

%jshell my jshell skcript.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>

但这与运行独立的java应用程序并不完全相同。

简明
反馈模式下启动
jshell
,并过滤所需内容-

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


此处有更多详细信息-

在jshell中,您可以通过发出以下命令将当前代码段保存到文件中:

/save Filename
/open Filename
同样,您可以通过发出以下命令将文件加载到当前上下文/会话中:

/save Filename
/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);
$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" }

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),否则最后一行将无法执行

管道使用可以通过“连字符”选项实现,而在初始jshell版本中没有

echo 'System.out.print(1 + 2)' | jshell -


这在Cygwin中不起作用:``peter@AB4745/cygdrive/c/JDKs/jdk9.0.0_x64/bin$echo 2+3 | jshell.exe |欢迎使用jshell--9版|了解介绍类型:/help intro jshell>``天哪,这太烦人了。所有关于jshell的宣传,它都无法运行
jshell helloworld.java
。有没有办法在脚本完成后禁止进入交互模式?@pnewook您可以在脚本中使用
/exit