[英]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?
在 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 开始完全忽略我的文件。 这是一个错误吗?
原来它是我的 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.jsh
的Jshell 脚本文件,并在运行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.jsh
时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 -
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.