java - 在命令中使用带有双 qoute 的 java Runtime.getRuntime().exec() 进行 Rsync
问题描述
您好我正在尝试执行以下操作:
Process p = null;
StringBuffer rbCmd = new StringBuffer();
rbCmd.append("rsync -e \"ssh -i /root/.ssh/key\" -va --relative /home/lego/hyb/abc/PVR2/Testdata/./R887/SCM/System root@myMachine:/xyz/data/SCMdata/");
p = Runtime.getRuntime().exec(rbCmd.toString());
但是我在命令行上收到以下错误。命令在命令行上正确执行
remote-shell 命令中缺少尾随-"。rsync 错误:main.c(361) [sender=3.0.6] 处的语法或使用错误(代码 1)
问题是因为我提到 ssh 密钥的命令中的双引号。
请帮忙改正。
解决方案
您的方法不起作用,因为Runtime.exec()
没有意识到“ssh -i /root/.ssh/key”是rsync
. 转义双引号使编译器满意,但并没有消除根本问题,即内置标记器的限制。
你可能有更多这样的运气:
Process p = Runtime.getRuntime().exec
(new String[]{"rsync", "-e", "ssh -i /root/.ssh/key", "-va" "--relative" ... });
也就是说,自己标记命令行,并将各个标记组成一个String[]
. 您事先决定了论点rsync
是什么,而不是允许exec()
(错误地)弄清楚。
不要忘记,如果rsync
产生任何输出,您需要安排您的应用程序使用它的stdout
and stderr
,否则它可能会停止。
推荐阅读
- c# - c# 如何从列表中的记录中只获取一个值?
- gwt - 带有计时器的 GWT 会话超时
- kubernetes - 将 statsd-exporter 设置为 Kubernetes 上的守护进程,并从 pod 向其发送指标
- python - Estimator.train() 和 .predict() 对于小数据集来说太慢了
- java - JavaFX:如果列宽等于最小宽度,则无法调整列大小
- python - 设置配置的数据库部分时如何修复“语法错误:无效语法”?
- python - 在 Python 中使用 zip 映射具有 2D 数组的列表
- python - y 中人口最少的类只有 1 个成员,太少了。任何类的最小组数不能少于 2
- pdf - 添加到 PDF 每一页顶部的行
- zebra-printers - 使用 ZPL II 在字段框中打印希腊文本