因此,我刚收到一个创建Java Shell App的任务,无需使用任何第三方库,也无需使用Runtime.exec()或ProcessBuilder API。
我不需要解决方案(显然我想自己做),但是我确实需要提示如何执行此操作?我希望该应用程序打开一个shell提示符,该提示符将接受使用JDK 8(Nashorn?)的各种命令。
谢谢!
不清楚要实现的目标。如果您要运行Nashhorn Shell,则可以这样实现(Java 8)
import jdk.nashorn.tools.Shell;
public class NashornShell {
public static void main(String[] args) {
Shell.main(new String[]{ "-scripting"});
}
}
当您看到Nashorn提示时,jjs>
您可以执行Linux命令...
jjs> $EXEC("ls");
它将列出当前目录(使用Linuxls
命令)。
...或执行Java命令...
jjs> java.lang.System.out.println("foo");
...或执行JavaScript命令...
jjs> print("foo");
有关更多信息,请参阅nashorn指南。
编辑如果只想yourCommand
作为参数传递。
NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine engine = factory.getScriptEngine(new String[]{"-scripting"});
String yourCommand = "ls";
Object eval = engine.eval("$EXEC(\"" + yourCommand + "\")");
System.out.println(eval);
编辑 do you think that instead of Nashorn I could just use raw streams directed to the OS from JVM
以下是可能的
Commands.java
class Commands {
public static void main(String[] args) {
System.out.println("ls");
System.out.println("whoami");
}
}
运行
#!/bin/sh
java Commands | while read command; do
echo
echo "command: $command"
$command
done
但这显然不建议您execute
在输出以下内容时使用Commands
:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句