考虑到Java9就在我们面前,而且我们终于可以使用jshell获得Java,我希望有一种方法可以向脚本添加一个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中有一个增强请求。
还有别的办法吗?
发布于 2017-07-05 11:51:39
使用
//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当然,命令行选项--show-version是可选的,但会立即反馈该工具正在运行。
额外的命令行选项--execution local防止jshell生成另一个VM。这加快了启动时间,如果脚本代码抛出异常,本地VM将退出。
有关更多选项,请参阅jshell --help和jshell --help-extra的输出。
更新
还可以看看https://github.com/jbangdev/jbang如何使用Java,它为从命令行运行.java文件提供了一个整洁的包装器。
发布于 2017-07-05 03:36:25
事实证明,尽管我还没有完全抑制解释的命令,但是非常接近我想要的,但是有一种方法是有办法的。
将test.jsh更改为:
#!/usr/bin/env sh
tail -n +4 "$0" | jshell -s "$@"
exit $?
System.out.println("Hello World")
/exit这给了我们:
⚡ ./test.jsh
-> System.out.println("Hello World")
Hello World
-> /exit发布于 2017-11-17 13:09:26
在施泰尼答案的启发下,我想出了一个更通用的解决方案。
https://gist.github.com/ffissore/012d7e32a096fde5266f49038c93dcaf
本质上:jshell-wrapper将去掉脚本的第一行(应该是shebang),并在脚本的末尾添加一个/exit
https://stackoverflow.com/questions/44916618
复制相似问题