Ответ 1
Хитрость заключалась в том, чтобы использовать список:
println(['ls', '/tmp/folder with spaces'].execute().text)
Как предоставить аргументы, содержащие пробелы, для метода выполнения строк в groovy? Просто добавление пробелов, как в оболочке, не помогло:
println 'ls "/tmp/folder with spaces"'.execute().text
Это вызовет три разбитых аргумента вызова ls.
Хитрость заключалась в том, чтобы использовать список:
println(['ls', '/tmp/folder with spaces'].execute().text)
Извините, ни один из трюков выше не работал у меня. Этот кусок ужасного кода - это единственное, что прошло:
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
Использование списка для меня немного неудобно.
Это выполнит задание:
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"')
Более сложный пример:
println runme('mysql "-uroot" "--execute=CREATE DATABASE TESTDB; USE TESTDB; \\. test.sql"');
Единственным недостатком является необходимость размещения котировок вокруг всех ваших аргументов, я могу жить с этим!
Вы пытались экранировать пробелы?
println 'ls /tmp/folder\ with\ spaces'.execute().text