java - 如何使用 jshell 执行 java 脚本?

标签 java shebang java-9 jshell

鉴于 Java 9 即将到来,我们终于可以使用 jshell 获得 java REPL,我希望有一种方法可以将 shebang 添加到脚本并拥有 jshell 解释它。

我尝试创建 test.jsh:

#!/usr/bin/env jshell -s
System.out.println("Hello World")
/exit

但是这给出了:

⚡ ./test.jsh
|  Error:
|  illegal character: '#'
|  #!/usr/bin/env jshell -s
|  ^
|  Error:
|  illegal start of expression
|  #!/usr/bin/env jshell -s
|    ^
Hello World

原来在 OpenJDK 中有一个增强请求 https://bugs.openjdk.java.net/browse/JDK-8167440 .

还有其他方法吗?

最佳答案

使用

//usr/bin/env jshell --show-version --execution local "$0""$@";退出 $?

作为 test.jsh 的第一行。 test.jsh 脚本可能如下所示:

//usr/bin/env jshell --show-version "$0" "$@"; exit $?
System.out.println("Hello World")
/exit

命令行选项 --show-version 当然是可选的,但会立即提供工具正在运行的反馈。

extra 命令行选项 --execution local 可防止 jshell 生成另一个 VM。这加快了启动时间,如果您的脚本代码引发异常,本地 VM 将退出。

更多选项请引用 jshell --helpjshell --help-extra 的输出。

更新

还可以看看 https://github.com/jbangdev/jbang 享受 Java 脚本编写的乐趣,它为从命令行运行 .java 文件提供了一个简洁的包装器。

关于java - 如何使用 jshell 执行 java 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44916618/

相关文章:

java - 写入套接字输出流而不关闭它

java - 没有@ EnableWebMvc,NoHandlerFoundException的自定义异常处理程序将无法工作

python - "python2"/"python3"在脚本的 shebang 上安全吗?

javascript - 让 Node.js 支持 JavaScript 文件的 shebang (#!)

java - 从 Java 9 访问 com.sun.tools.javac.util

java - 游戏中的多人游戏。如何明智地设计它?

Java:从父类访问子类方法

linux - 跨不同 Linux 发行版的 Shell 脚本行为

java.lang.ExceptionInInitializerError 与 gradle

java - OpenJDK9 (Docker), gradle 4.2.1, GitLab