2012-09-20 61 views
5

quiero ejecutar comandos de shell desde mi script groovy. Probé el siguiente:cómo llamar comandos de shell desde Groovy correctamente

"mkdir testdir".execute() 

y esto sólo funciona bien. Ahora quería hacer un archivo, escribir algo en el archivo y luego abrir un editor de texto para ver el archivo.

def execute(cmd) { 
    def proc = cmd.execute() 
    proc.waitFor() 
} 

execute("touch file") 
execute("echo hello > file") 
execute("gedit file") 

Ahora gedit se abre correctamente pero no hay ninguna cadena "hola" en el archivo. ¿Cómo funciona esto?

Respuesta

4

No se puede hacer cambio de dirección en la línea:

execute("echo hello > file") 

para que nada se escribe en el archivo. La forma más sencilla de manejar esto es, probablemente, envolver todos sus comandos en un único script de shell y luego ejecutar este script.

De lo contrario, puede leer la salida estándar del comando echo (sin el > file), y luego escribir esto en file en Groovy.

O puede hacer:

execute([ 'bash', '-c', 'echo hello > file' ]) 

que deberían funcionar como método de execute se acaba de realizar the List.execute() method

+1

no sé nada acerca de 'groovy'; Dicho esto, ¿hay alguna manera de decirle al método 'execute' que pase la línea de comando a un shell para su procesamiento antes de la ejecución, como la opción' shell = True' para el módulo 'subproceso' de Python? – chepner

+1

@chepner En realidad, tienes razón ... hay una manera ... agregada a la respuesta –

+0

¡Gracias! eso funciona bien :) * respuesta aceptada * – Moonlit

Cuestiones relacionadas