繁体   English   中英

如何运行 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只能“即时”工作,而不是从文件中读取:

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>

您可以使用这些语句创建一个名为some.jshJshell 脚本文件,并在运行jshell的命令提示符下,将其执行为:-

jshell /path/to/some.jsh

在 MacOSX 上,我会执行以下操作:

在此处输入图片说明

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

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

文档中

Java Shell 工具 (JShell) 是一种用于学习 Java 编程语言和构建 Java 代码原型的交互式工具。 JShell 是一个读取-计算-打印循环 (REPL),它在输入声明、语句和表达式时对其进行计算并立即显示结果。

根据这句话,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/[^>]*>(.+)/\1/gp'

输出: 42

此处有更多详细信息- 如何从 shell 或 windows commandLine 以内联方式执行 java jshell 命令

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

/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.jshjshell 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 -

https://docs.oracle.com/en/java/javase/11/tools/jshell.html
https://bugs.openjdk.java.net/browse/JDK-8187439

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM