带有 java Runtime.getRuntime().exec(command) 的 mysqldump 命令不生成转储

mysqldump command with java Runtime.getRuntime().exec(command) not generating dump

我已尝试使用以下代码片段:

Process p;

String command="mysqldump -u'scmuser' -p'scm3' --routines db_name  >  /home/ubuntu/wh_demo_db_reset.sql";
p = Runtime.getRuntime().exec(command);

没有生成转储文件,也没有抛出任何错误。我无法预测确切的问题请帮助我。提前致谢。

元字符“>”由shell实现;没有 shell 涉及 运行 带有 Runtime.exec() 的程序,因此 mysqldump 的最后两个参数是垃圾。使用 Runtime.exec() 的数组参数形式;传递“/bin/sh”作为第一个参数,“-c”作为第二个参数,你的命令行作为第三个;这样 shell 元字符将由 /bin/sh.

解释

您可以将 cmd 数组组成为:

String[] cmdarray = {"/bin/sh","-c",command}; 
Process process = Runtime.getRuntime().exec(cmdArray);