Вопрос-ответ

How to run Unix shell script from Java code?

Как запустить Unix shell script из Java-кода?

Запустить команду Unix из Java довольно просто.

Runtime.getRuntime().exec(myCommand);

Но возможно ли запустить сценарий оболочки Unix из кода Java? Если да, было бы хорошей практикой запускать сценарий оболочки из кода Java?

Переведено автоматически
Ответ 1

Вам действительно стоит взглянуть на Process Builder. Он действительно создан для такого рода вещей.

ProcessBuilder pb = new ProcessBuilder("myshellScript.sh", "myArg1", "myArg2");
Map<String, String> env = pb.environment();
env.put("VAR1", "myValue");
env.remove("OTHERVAR");
env.put("VAR2", env.get("VAR1") + "suffix");
pb.directory(new File("myDir"));
Process p = pb.start();
Ответ 2

Вы также можете использовать библиотеку Apache Commons exec.

Пример :

package testShellScript;

import java.io.IOException;
import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.DefaultExecutor;
import org.apache.commons.exec.ExecuteException;

public class TestScript {
int iExitValue;
String sCommandString;

public void runScript(String command){
sCommandString = command;
CommandLine oCmdLine = CommandLine.parse(sCommandString);
DefaultExecutor oDefaultExecutor = new DefaultExecutor();
oDefaultExecutor.setExitValue(0);
try {
iExitValue = oDefaultExecutor.execute(oCmdLine);
} catch (ExecuteException e) {
System.err.println("Execution failed.");
e.printStackTrace();
} catch (IOException e) {
System.err.println("permission denied.");
e.printStackTrace();
}
}

public static void main(String args[]){
TestScript testScript = new TestScript();
testScript.runScript("sh /root/Desktop/testScript.sh");
}
}

Для дополнительной справки пример также приведен в документе Apache.

Ответ 3

Я думаю, вы сами ответили на свой вопрос следующим образом

Runtime.getRuntime().exec(myShellScript);

Что касается того, является ли это хорошей практикой... что вы пытаетесь сделать с помощью сценария оболочки, чего вы не можете сделать с Java?

Ответ 4

Я бы сказал, что это не в духе Java запускать сценарий оболочки из Java. Java задумана как кроссплатформенная, и запуск сценария оболочки ограничил бы ее использование только UNIX.

С учетом сказанного, определенно возможно запустить сценарий оболочки из Java. Вы бы использовали точно такой же синтаксис, который указали (я сам его не пробовал, но попробуйте выполнить сценарий оболочки напрямую, и если это не сработает, запустите саму оболочку, передав сценарий в качестве параметра командной строки).

java