Groovy выполнить с параметрами, содержащими пробелы - PullRequest
27 голосов
/ 24 апреля 2009

Как предоставить аргументы, содержащие пробелы, для метода execute строк в groovy? Простое добавление пробелов, как в оболочке, не помогает:

println 'ls "/tmp/folder with spaces"'.execute().text

Это даст три неверных аргумента для вызова ls.

Ответы [ 5 ]

27 голосов
/ 25 апреля 2009

Хитрость заключалась в том, чтобы использовать список:

println(['ls', '/tmp/folder with spaces'].execute().text)
1 голос
/ 02 июня 2013

Извините, ни один из вышеперечисленных трюков не помог мне. Этот кусок ужасного кода - единственное, что произошло:

    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
0 голосов
/ 04 января 2019

Один странный трюк для людей, которым нужна регулярная обработка кавычек, каналов и т. Д.: Используйте bash -c

['bash','-c',
'''
docker container ls --format="{{.ID}}" | xargs -n1 docker container inspect --format='{{.ID}} {{.State.StartedAt}}' | sort -k2,1
'''].execute().text
0 голосов
/ 16 октября 2009

Использование списка кажется мне немного неуклюжим.

Это сделает работу:

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"');

Единственным недостатком является необходимость ставить цитаты вокруг всех ваших аргументов, я могу жить с этим!

0 голосов
/ 24 апреля 2009

вы пытались выбраться из пробелов?

println 'ls /tmp/folder\ with\ spaces'.execute().text
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...