编写一个只接受参数的`jjs` shebanged脚本

时间:2016-05-08 05:23:44

标签: java shell nashorn jjs

Supposedly jjs是nashorn的Java 8版本ready for shell-scripting。但是当我写一个具有执行权限的文件时:

#!/usr/bin/jjs
arguments.forEach(function(v,i,a){print(v);});

运行它会产生一些不太理想的shell脚本行为:

$./file.js
$./file.js one two
java.io.IOException: one is not a file
$./file.js -- one two
one
two
$./file.js file.js -- one two # what were they thinking
one
two
one
two
$

所以,我不希望这个脚本我写的是允许在文件运行后对文件进行任意解释,也许我应该在shebang中使用--

#!/usr/bin/jjs --
arguments.forEach(function(v,i,a){print(v);});

但这会使更少有用:

$./file.js
jjs>^D
$./file.js one two
jjs>^D
$./file.js -- one two
jjs>

是的,被放入REPL提示符正是我认为应该的。

我应该如何能够执行一个脚本,该脚本具有直接传递的参数,而不是由jjs本身解释,这样我就可以获得如下行为:

$./file.js one two
one
two
$

1 个答案:

答案 0 :(得分:2)

该示例在Nashorn的JDK 9版本中按预期工作。我将负责向后移植所需的补丁程序,以便它们可以出现在即将发布的8u版本中。

更新:所需的更改会反向移植到8u流,但不清楚将在何时发布。来自https://jdk9.java.net/download/的JDK 9的早期访问版本具有shebang功能,还有其他扩展,例如$ EXEC内置的管道支持。