带有 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);
我已尝试使用以下代码片段:
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);