Команда не работает должным образом, когда она выполняется из Groovy скрипт - PullRequest
0 голосов
/ 26 августа 2018

я создаю отличный сценарий для выполнения сценариев sql из контейнера Docker. Это моя команда, которую я хочу выполнить

docker exec -i wienerberger_generalshale_com mysql -u root -proot -r < 001_CategorySamples.sql  generalshale_website

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

Вот как я выполняю команду из groovy:

def command =  "docker exec -i wienerberger_generalshale_com mysql -u root -proot -r < 001_CategorySamples.sql  generalshale_website"
def proc = command.execute();
def outputStream = new StringBuffer();
proc.waitForProcessOutput(outputStream, System.err);
println(outputStream .toString());

Кто-нибудь знает, почему результат не совпадает или почему команда не распознается?

1 Ответ

0 голосов
/ 26 августа 2018

Перенаправление из файла sql обрабатывается оболочкой операционной системы при непосредственном вызове из терминала, а не при выполнении команды, которую вы выполняете (докер в вашем случае).Вы должны справиться с этим самостоятельно.Примерно так:

def infile = '001_CategorySamples.sql'
def command = 'docker exec -i wienerberger_generalshale_com mysql -u root -proot -r generalshale_website'
def proc = command.execute()
Thread.start{
    def writer = new PrintWriter(new BufferedOutputStream(proc.out))
    writer << new File(infile).text
    writer.close()
}
def outputStream = new StringBuffer()
proc.waitForProcessOutput(outputStream, System.err)
println outputStream

Вы можете найти похожие вопросы, задаваемые для Java:

Или посмотрите эту страницу PLEAC (переводы Perl поваренной книги) для примеров некоторых похожих сценариев Groovy:

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