¿Cómo ejecutar un script de shell Unix desde código Java?

Resuelto asked hace 15 años • 0 respuestas

Es bastante sencillo ejecutar un comando Unix desde Java.

Runtime.getRuntime().exec(myCommand);

Pero, ¿es posible ejecutar un script de shell Unix desde código Java? En caso afirmativo, ¿sería una buena práctica ejecutar un script de shell desde el código Java?

 avatar Feb 08 '09 12:02
Aceptado

Realmente deberías mirar Process Builder . Realmente está diseñado para este tipo de cosas.

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();
Milhous avatar Feb 08 '2009 20:02 Milhous

También puede utilizar la biblioteca ejecutiva de Apache Commons .

Ejemplo :

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

Para mayor referencia, también se proporciona un ejemplo en Apache Doc .

Not a bug avatar Feb 15 '2014 04:02 Not a bug

Creo que has respondido tu propia pregunta con

Runtime.getRuntime().exec(myShellScript);

En cuanto a si es una buena práctica... ¿qué estás intentando hacer con un script de shell que no puedes hacer con Java?

Chris Ballance avatar Feb 08 '2009 05:02 Chris Ballance