179 Stimmen

Wie führt man ein Unix-Shell-Skript aus Java-Code aus?

Es ist recht einfach, einen Unix-Befehl von Java aus auszuführen.

Runtime.getRuntime().exec(myCommand);

Aber ist es möglich, ein Unix-Shell-Skript mit Java-Code auszuführen? Wenn ja, wäre es eine gute Praxis, ein Shell-Skript aus Java-Code heraus auszuführen?

186voto

Milhous Punkte 14201

Sie sollten sich wirklich ansehen Process Builder . Es ist wirklich für diese Art von Dingen gebaut.

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();

28voto

Not a bug Punkte 4256

Sie können verwenden Apache Commons exec-Bibliothek auch.

Beispiel:

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");
    }
}

Als weitere Referenz wird ein Beispiel angeführt unter Apache Doc auch.

23voto

Chris Ballance Punkte 32892

Ich denke, Sie haben Ihre eigene Frage beantwortet mit

Runtime.getRuntime().exec(myShellScript);

Zur Frage, ob es eine gute Praxis ist: Was wollen Sie mit einem Shell-Skript erreichen, das Sie mit Java nicht erreichen können?

22voto

Jack Leow Punkte 21300

Ich würde sagen, es ist nicht im Geiste von Java um ein Shell-Skript in Java auszuführen. Java soll plattformübergreifend sein, und die Ausführung eines Shell-Skripts würde seine Verwendung auf UNIX beschränken.

Es ist also durchaus möglich, ein Shell-Skript in Java auszuführen. Sie würden genau die gleiche Syntax verwenden, die Sie aufgeführt haben (ich habe es nicht selbst ausprobiert, aber versuchen Sie, das Shell-Skript direkt auszuführen, und wenn das nicht funktioniert, führen Sie die Shell selbst aus und übergeben Sie das Skript als Befehlszeilenparameter).

15voto

Ja, das ist möglich. Das hat bei mir funktioniert.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.omg.CORBA.portable.InputStream;

public static void readBashScript() {
        try {
            Process proc = Runtime.getRuntime().exec("/home/destino/workspace/JavaProject/listing.sh /"); //Whatever you want to execute
            BufferedReader read = new BufferedReader(new InputStreamReader(
                    proc.getInputStream()));
            try {
                proc.waitFor();
            } catch (InterruptedException e) {
                System.out.println(e.getMessage());
            }
            while (read.ready()) {
                System.out.println(read.readLine());
            }
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X