Странная проблема с несовпадающими кавычками при попытке запустить команду оболочки из консоли скрипта - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь запустить локальную команду оболочки из консоли сценария, и ошибочная кавычка пинает меня в задницу.Вся команда заключена в двойные кавычки, а команда, выполненная из «-c», заключена в одинарные кавычки.Там не опечатка, я клянусь!Есть идеи?Странно то, что это происходит только в том случае, если в одинарных кавычках есть несколько элементов, разделенных пробелами.Если я сделаю один исполняемый файл, такой как 'ls', это будет нормально.

def String target_database = "testdb"
def String version = "7.6.5.4"

def sout = new StringBuffer(), serr = new StringBuffer()
def proc = "sudo su oracle -c '/home/oracle/scripts/datapump/refresh_database.sh ${target_database} ${version}'".execute()

proc.consumeProcessOutput(sout, serr)
proc.waitForOrKill(1000)
println "STDOUT\n $sout"
println "STDERR\n $serr"

STDOUT

STDERR testdb: -c: строка 0: неожиданный EOF при поиске соответствия `'' testdb: -c: строка 1: синтаксическая ошибка: неожиданный конец файла

1 Ответ

0 голосов
/ 21 декабря 2018

Groovys execute() в строке просто разбивает пробел, и поэтому это полезно только для очень простых команд.Вместо этого всегда используйте execute() в массиве:

def proc = ["sudo", "su", "oracle", "-c", "/home/oracle/scripts/datapump/refresh_database.sh ${target_database} ${version}"].execute()

. Или, если вы предпочитаете использовать цитаты для оболочек, используйте ["sh", "-c", "sudo ..."].execute()

. И в примечании: sudo имеет -u парам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...