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());
有人知道为什么结果不相同或为什么命令无法识别吗?
答案 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场景的示例: