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
。
如果我直接在cmd
上尝试ternimal
值,它就可以了。
代码有什么问题?
被修改
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
现在可能出现了什么问题
答案 0 :(得分:2)
您需要使用不同版本的exec
,因为您使用的版本假设命令 name 是整个字符串。
您需要使用exec
{{1}},它采用字符串数组,其中数组中的每个元素都是参数之一。
如果确实如此,这个问题与this flavor(你可以看到一个例子)
重复