2016-08-23 4 views
0

У меня ниже команд в .txt-file:Как выполнить команду с несколькими параметрами из файла в градиенте?

java -jar /path/to/something.jar --classpath="/path/to/something/other.jar" --url="something:@127.0.0.1:1234:TEST12" --driver=some.driver update 

Как можно видеть несколько параметров с другим синтаксисом (с -, --, и/или с и без "") используются.

Я попытался следующий код:

task test(type: Exec) { 
    workingDir '/path/to/working/dir' 
    String commandFromFile = new File('/path/to/file/with/command' + 'filewithcommand.txt').getText('UTF-8') 
    commandLine commandFromFile 
} 

На платформах этот код работает, но на unix это не делает.

ответ

1

Как вы можете видеть в the documentation of the Exec task, вы должны разделить свою команду на свои части. Так что commandLine commandFromFile.split(' ') должен работать, если у вас нет пробелов в ваших аргументах. Если у вас есть, вам нужен более сложный способ разделить команду, в которой учитываются кавычки.

Или вы изменяете формат файла команды так, чтобы он имел один аргумент в строке, и вы используете .readLines('UTF-8') вместо .getText('UTF-8').

Я не уверен на 100% о следующем, но может быть, вам также нужно удалить цитаты вокруг аргументов, даже если они содержат пробелы, поскольку вы передаете аргументы как единичные объекты в вызов commandLine и, следовательно, нуждаетесь в здесь нет цитат для экранирования пробелов. В зависимости от ОС и инструмента, который вы вызываете, он может даже сломать команду, если есть кавычки, которые она не может обрабатывать.

В качестве альтернативы, но это хуже метод имхо, вы также можете сделать что-то вроде

if (windows) { 
    commandLine 'cmd', '/c', commandFromFile 
} else { 
    commandLine 'sh', '-c', commandFromFile 
} 

где то процессор команда делает расщепление и так далее. Там вам нужны цитаты и прочее. Конечно, переменная windows в этом примере должна быть определена, например. г. от свойств системы.

Смежные вопросы