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引擎注释页面获得(并修改了)上面的代码片段.