ste*_*bot 20 java shebang java-9 jshell
鉴于Java 9已经出现在我们身上,我们终于可以拥有一个java REPL了,jshell我希望有一种方法可以将一个shebang添加到脚本中并对其进行jshell解释.
我尝试创建test.jsh:
#!/usr/bin/env jshell -s
System.out.println("Hello World")
/exit
Run Code Online (Sandbox Code Playgroud)
然而,这给了:
? ./test.jsh
| Error:
| illegal character: '#'
| #!/usr/bin/env jshell -s
| ^
| Error:
| illegal start of expression
| #!/usr/bin/env jshell -s
| ^
Hello World
Run Code Online (Sandbox Code Playgroud)
事实证明,在OpenJDK https://bugs.openjdk.java.net/browse/JDK-8167440中有一个增强请求.
有没有其他方法可以做到这一点?
Sor*_*ras 21
使用
//usr/bin/env jshell --show-version --execution local "$0" "$@"; exit $?
作为第一行test.jsh.该test.jsh脚本可能如下所示:
//usr/bin/env jshell --show-version "$0" "$@"; exit $?
System.out.println("Hello World")
/exit
Run Code Online (Sandbox Code Playgroud)
--show-version当然,命令行选项是可选的,但会立即反馈工具正在运行
该额外的命令行选项--execution local阻止jshell产卵另一个VM.这会加快启动时间,如果脚本代码抛出异常,则本地VM将退出.
查阅输出jshell --help和jshell --help-extra更多选项.
事实证明,有一点技巧,有一种方法,虽然我还没有完全设法抑制解释的命令,但非常接近我想要的。
\n\n改成test.jsh:
#!/usr/bin/env sh\ntail -n +4 "$0" | jshell -s "$@"\nexit $?\nSystem.out.println("Hello World")\n/exit\nRun Code Online (Sandbox Code Playgroud)\n\n这给了我们:
\n\n\xe2\x9a\xa1 ./test.jsh\n-> System.out.println("Hello World")\nHello World\n-> /exit\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
3045 次 |
| 最近记录: |