2009-04-24 27 views

Respuesta

23

El truco consistía en utilizar una lista:

println(['ls', '/tmp/folder with spaces'].execute().text) 
+1

En caso de que el comando se genere dinámicamente o se le pregunte al usuario, esta solución no está funcionando. Seguramente no puede ser tan difícil analizar teniendo en cuenta las citas ... – Uberto

-4

¿Has probado escapando espacios?

println 'ls /tmp/folder\ with\ spaces'.execute().text 
+0

Sí, pero no funcionó. –

-2

mediante una lista siente un poco torpe para mí.

Esto haría el trabajo:

def exec(act) { 
def cmd = [] 
act.split('"').each { 
    if (it.trim() != "") { cmd += it.trim(); } 
} 
return cmd.execute().text 
} 

println exec('ls "/tmp/folder with spaces"') 

Un ejemplo más complejo:

println runme('mysql "-uroot" "--execute=CREATE DATABASE TESTDB; USE TESTDB; \\. test.sql"'); 

El único inconveniente es la necesidad de poner comillas alrededor de todos sus argumentos, puedo vivir con eso!

0

Lo siento, ninguno de los trucos anteriores funcionó para mí. Este pedazo de código horrible es lo único que pasó:

def command = 'bash ~my_app/bin/job-runner.sh -n " MyJob today_date=20130202 " ' 
    File file = new File("hello.sh") 
    file.delete()  
    file << ("#!/bin/bash\n") 
    file << (command) 
    def proc = "bash hello.sh".execute()     // Call *execute* on the file 
Cuestiones relacionadas