我想用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>
答案 0 :(得分:5)
您可以使用这些语句创建名为some.jsh
的{{3}}文件,并在命令提示符下运行jshell
,执行方式为: -
jshell /path/to/some.jsh
在MacOSX上,我会做类似的事情:
答案 1 :(得分: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"。
答案 2 :(得分:1)
JShell
并不意味着直接运行Java类。如果要运行java类,仍需要以旧方式执行 - java <your-class-name>
。
来自docs,
Java Shell工具(JShell)是一个用于学习的工具 Java编程语言和原型Java代码。 JShell是一个 Read-Evaluate-Print Loop(REPL),用于评估声明, 输入并立即显示的语句和表达式 结果。
根据这句话,JShell用于运行或尝试单个Java语句。在传统的java方式中,您必须先编写完整的Java程序,然后才能运行它并查看结果。但JShell允许您尝试Java语句,而无需构建完整的独立Java应用程序。
所以对你的问题的简短回答是,不,你不能调用像jshell my-jshell-skript.java
这样的独立java应用程序。但是,您可以调用包含单个JShell命令或Java语句的脚本文件。因此,如果从Java程序复制所有语句并将其粘贴到JShell脚本,则可以运行以下脚本:
% jshell my-jshell-skript.jsh
但这与运行独立的Java应用程序并不完全相同。
答案 3 :(得分:1)
在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" }
答案 4 :(得分:0)
在@app.route('/<string:msg>')
反馈模式下启动jshell
并过滤所需内容 -
concise
输出 $echo '40 + 2' | jshell --feedback concise | sed -n '2p' |sed -En 's/[^>]*>(.+)/\1/gp'
此处有更多详情 - How to execute java jshell command as inline from shell or windows commandLine
答案 5 :(得分:0)
在 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),否则最后一行将无法执行
答案 6 :(得分:0)
最初的jshell发行版中不提供“ hyphen”选项,可以实现管道使用。
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