在java中为nashorn启用脚本模式

Pan*_*hul 5 javascript java bash java-8 nashorn

我必须使用nashorn从Java执行一些bash shell命令.

我有一个javascript文件:

#!/usr/bin/jjs

var testBashMethod = function(name){

    $EXEC("echo Hello from bash ${name}");
};

testBashMethod("foobar");
Run Code Online (Sandbox Code Playgroud)

我有java方法将上面的javascript方法加载到Nashorn引擎并执行它:

public void executeScript(){

    ScriptEngineManager engineManager = new ScriptEngineManager();
    ScriptEngine engine = engineManager.getEngineByName("nashorn");

    engine.eval(new FileReader("script.js"));

    Invocable invocable = (Invocable)engine;
    invocable.invokeFunction("testBashMethod");
}
Run Code Online (Sandbox Code Playgroud)

在执行上述方法时,我收到以下错误:

jdk.nashorn.internal.runtime.ECMAException: ReferenceError: "$EXEC" is not defined
Run Code Online (Sandbox Code Playgroud)

我的猜测是我需要在java中以脚本模式加载nashorn引擎.在终端上,我可以使用脚本模式运行引擎,然后成功执行以下操作:

jjs -scripting
jjs> $EXEC('echo Hello World..!!')
Run Code Online (Sandbox Code Playgroud)

我的问题:如何在脚本模式下加载Java中的nashorn引擎?以便bash脚本方法可用.或者还有其他我想念的东西.

感谢您的帮助.

Dav*_*ell 10

NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine engine = factory.getEngine(new String[] { "-scripting" });
Run Code Online (Sandbox Code Playgroud)

有关更多文档,请参阅Nashorn Wiki.我从Nashorn jsr223引擎注释页面获得(并修改了)上面的代码片段.