I have to execute some bash shell commands from Java using nashorn.
I have a javascript file:
#!/usr/bin/jjs
var testBashMethod = function(name){
$EXEC("echo Hello from bash ${name}");
};
testBashMethod("foobar");
I have java method loading the above javascript method into Nashorn engine and executing it:
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");
}
On executing the above method I get the following error:
jdk.nashorn.internal.runtime.ECMAException: ReferenceError: "$EXEC" is not defined
My guess is that I need to load the nashorn engine in scripting mode in java. On the terminal I can run the engine with scripting mode then the following executes successfully:
jjs -scripting
jjs> $EXEC('echo Hello World..!!')
My Question: How do I load the nashorn engine in Java in scripting mode? so that bash scripting methods are available. Or is there something else that I am missing.
Thank you for the help.
NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine engine = factory.getEngine(new String[] { "-scripting" });
See the Nashorn Wiki for lots more documentation. I got (and modified) the above snippet from the Nashorn jsr223 engine notes page.