从groovy脚本执行命令时命令无法正常工作

时间:2018-08-26 10:56:56

标签: mysql docker groovy

im创建用于从docker容器执行sql脚本的groovy脚本。这是我要执行的命令

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 :(得分:2)

从终端直接调用时,操作系统外壳程序处理sql文件的重定向,而不是通过您正在执行的命令(在您的情况下为docker)处理。您必须自己处理。像这样:

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场景的示例: