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