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
现在可能是错的
您需要使用不同版本的exec
,因为您使用的版本假定命令名是整个字符串。
你需要使用这种 exec
风格 ,它接受一个字符串数组,其中数组中的每个元素是其中的一个参数。
如果事实上,这个问题是如何执行命令与参数的副本? (你可以看到一个例子)