【问题标题】:not able to execute rsync from java [duplicate]无法从java执行rsync [重复]
【发布时间】:2013-12-21 08:40:40
【问题描述】:
 Process p;
 String cmd = "rsync --timeout=20 -v -r -E -e \"ssh -o StrictHostKeyChecking=no -i "
                      + "/usr/local/my.pem\"" 
                      + " root@<IP>:/usr/local/test/ /other/test";
try {
    p = Runtime.getRuntime().exec(cmd);
    System.out.println("going to exec1");
    int val = p.waitFor();  
    }

当我尝试上面的代码时,rsync 不起作用,val = 1

如果我直接在ternimal 上尝试cmd 值,它工作正常。

代码有什么问题?


编辑

String[] cmd = new String[]{"rsync", "--timeout=20", "-v", "-r", "-a", "-E", "-e",
                        "\"ssh -o StrictHostKeyChecking=no -i " + "/usr/local/my.pem" + "\"",
                         "root" + "@" + "198.168.1.3" + ":" + "/usr/local/test1" ,
                        "/usr/local" + "/" + "test1"};

    try {
        p = Runtime.getRuntime().exec(cmd);
        System.out.println("going to exec1");
        int val = p.waitFor();  
        }

这次val = 12 现在有什么问题

【问题讨论】:

  • 奥古斯托是对的。还要记住 javas Runtime.exec 不会插入 shell 元字符。
  • 删除您在 ssh 命令周围添加的 \" 字符。您只需要在 shell 命令行上使用引号来告诉 shell 单词边界在哪里,使用多参数 exec 您已经自己完成了单词拆分。正如现在所写的那样,您告诉 rsync 使用名为 doublequote-s-s-h 的命令,该命令不存在。

标签: java linux ssh rsync


【解决方案1】:

您需要使用不同版本的 exec,因为您使用的版本假定命令 name 是整个字符串。

你需要使用execthis flavor,它接受一个字符串数组,其中数组中的每个元素都是参数之一。

如果事实上,这个问题是How to execute command with parameters? 的副本(你可以看到一个例子)

【讨论】:

  • 请查看更新后的问题
猜你喜欢
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
  • 2017-07-09
  • 2020-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-23
相关资源
最近更新 更多