2010-03-17 30 views
7

Estoy trabajando en una aplicación y tengo un problema al ejecutar el comando de shell desde la aplicación java. Aquí está el código:ejecute el comando de shell desde java

public String execRuntime(String cmd) { 

     Process proc = null; 
     int inBuffer, errBuffer; 
     int result = 0; 
     StringBuffer outputReport = new StringBuffer(); 
     StringBuffer errorBuffer = new StringBuffer(); 

     try { 
      proc = Runtime.getRuntime().exec(cmd); 
     } catch (IOException e) { 
      return ""; 
     } 
     try { 
      response.status = 1; 
      result = proc.waitFor(); 
     } catch (InterruptedException e) { 
      return ""; 
     } 
     if (proc != null && null != proc.getInputStream()) { 
      InputStream is = proc.getInputStream(); 
      InputStream es = proc.getErrorStream(); 
      OutputStream os = proc.getOutputStream(); 

      try { 
       while ((inBuffer = is.read()) != -1) { 
        outputReport.append((char) inBuffer); 
       } 

       while ((errBuffer = es.read()) != -1) { 
        errorBuffer.append((char) errBuffer); 
       } 

      } catch (IOException e) { 
       return ""; 
      } 
      try { 
       is.close(); 
       is = null; 
       es.close(); 
       es = null; 
       os.close(); 
       os = null; 
      } catch (IOException e) { 
       return ""; 
      } 

      proc.destroy(); 
      proc = null; 
     } 


     if (errorBuffer.length() > 0) { 
      logger 
        .error("could not finish execution because of error(s)."); 
      logger.error("*** Error : " + errorBuffer.toString()); 
      return ""; 
     } 


     return outputReport.toString(); 
    } 

pero cuando intento de usar exec comando como:

/export/home/test/myapp -T "some argument" 

miaplicacion lee "some argument" como dos seperated arguments.but quiero leer "some argument" ya que sólo un argumento. cuando ejecuto directamente este comando desde la terminal, se ejecutó correctamente. Intenté '"some argument"', ""some argument"", "some\ argument" pero no funcionó para mí. ¿Cómo puedo leer este argumento como un argumento?

Respuesta

16

Recuerdo que una sobrecarga de método exec proporciona un parámetro para los argumentos por separado. Necesita usar ese

Yup. Aquí está lo

public Process exec(String[] cmdarray) 
      throws IOException 

Sólo hacer la línea de comandos y todos los argumentos de los elementos de la matriz Separa cadena

+0

thx @midhat. esto funciona para mi – Aykut

+0

[Cuando 'Runtime.exec()' no: Navegue por las trampas relacionadas con el método 'Runtime.exec()'] (http://www.javaworld.com/article/2071275/core-java/when -runtime-exec --- won-t.html) o posiblemente una [consulta del motor de búsqueda] a prueba del futuro (https://duckduckgo.com/?q=When+Runtime.exec+wont+Navigate+yourself+around+ trampas + relacionadas + a + el + método Runtime.exec +). –

-3

En primer lugar hacer una cadena
cmd String = "/ export/home/test/miaplicacion -T \" algún argumento \ "";
luego ejecuta cmd en proc

+2

Esto no hace otra cosa que lo que Aykut ya señaló. –

+0

@MiladNaseri Excepto que escapa correctamente de las comillas, que fue el verdadero error de Aykut. – Silveri

Cuestiones relacionadas