Не совсем понятно, чего вы хотите достичь. Если вы хотите запустить Nashhorn оболочки вы можете достичь его, как это (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");
который перечислит текущий каталог (с использованием команды Linux ls
).
... или выполнять команды Java ...
jjs> java.lang.System.out.println("foo");
... или выполнять команды JavaScript ...
jjs> print("foo");
Для получения дополнительной информации посмотрите в nashorn guide.
Редактировать Если вы хотите передать только 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");
}
}
run.sh
#!/bin/sh
java Commands | while read command; do
echo
echo "command: $command"
$command
done
Но, очевидно, это не рекомендуется, если вы хотите execute
выход Commands
:
- приложение Java не имеет никакого контроля о состоянии возврата выполненных одиночных команд
- если одна команда ожидания для ввода пользователем ваше приложение Java не знает его
- ваше приложение Java не имеет доступа к выходу, созданному командами
- все команды вслепую выведены
- и еще некоторые недостатки
Возможно, вы можете использовать JNI – Sanjeev
Nashorn - это механизм Javascript (как в вашем браузере); не используя 'ProcessBuilder' или' Runtime.exec', потому что это будет очень сложно. Удачи. –
Нужно ли принимать тот же самый набор команд, что и в Linux Bash Shell? Или вы могли бы просто создать свой собственный упрощенный интерпретатор команд? –