【问题标题】:How to perform a shell redirection (command > output.txt) using ProcessBuilder?如何使用 ProcessBuilder 执行 shell 重定向(命令 > output.txt)?
【发布时间】:2013-10-04 03:15:10
【问题描述】:

我想使用 ProcessBuilder 备份 MySQL 数据库,但 > 字符未按预期解释。这是我的代码:

java.util.List<String> cmd = new java.util.ArrayList<>();
cmd.add("mysqldump");
cmd.add("-u");
cmd.add("root");
cmd.add("-p"+password);
cmd.add("DBx");
cmd.add(">");
cmd.add("DBbk.sql");

ProcessBuilder pb = new ProcessBuilder(cmd);
pb.directory(new File("."));
Process p = pb.start();
p.waitFor();

BufferedReader err = new BufferedReader(new InputStreamReader(p.getErrorStream()));
while((line = err.readLine()) != null) {
    System.out.println(line);
}

输出是:

警告:在命令行界面上使用密码可能不安全。 mysqldump:找不到表:“>”

【问题讨论】:

  • 重定向是一个shell函数。您似乎直接运行mysqldump,因此重定向将不适用。

标签: java mysql windows cmd


【解决方案1】:

进程构建器直接执行程序,而不是通过 shell/命令提示符执行它。因此,您不会获得 shell 的任何不错的功能,例如用于重定向的 &gt; 字符。对不起。

【讨论】:

    【解决方案2】:

    试一试(仅显示解决方案的重要部分):

    new ProcessBuilder("cmd", "/C", "your_command > DBbk.sql").start() 
    

    这样你就明确地调用了cmd。在 Linux 中,您可以调用 bash 或您使用的任何 shell。

    【讨论】:

      猜你喜欢
      • 2017-05-27
      • 2014-02-10
      • 2021-11-09
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多