1

我正在从 Java 程序执行一个 shell 脚本。我已经使用 Runtime 类实现了它。下面是我实现的代码

final StringBuilder sb = new StringBuilder("test.sh");
sb.append("/path to/my/text file");

final Process p = Runtime.getRuntime().exec(sb.toString());

这里 sb 是字符串缓冲区对象,我在其中附加参数并在 exec 方法中使用它。但问题是我传递的参数“/path to/my/text file”被认为是4个参数

/path
 to
/my/text
 file

但是如果在 shell 中作为 test.sh "/path to/my/text file" 运行,它被视为单个参数。如何使用 Java 代码实现相同的目标,我需要将带有空格的路径视为单个参数。任何请都会非常可观。

4

4 回答 4

5

使用ProcessBuilder,它就是它的设计目的,让您的生活更轻松

ProcessBuilder pb = new ProcessBuilder("test.sh", "/path", "/my/text file");
Process p = pb.start();
于 2012-10-10T05:25:43.320 回答
0

用这个:

final StringBuilder sb = new StringBuilder("test.sh");
sb.append(" \"/path to/my/text file\"");
于 2012-10-10T05:15:58.687 回答
0

要重新创建您在 shell 中手动运行的命令test.sh "/path to/my/text file",您需要包含引号。

final StringBuilder sb = new StringBuilder("test.sh");
sb.append(" \"/path to/my/text file\""); //notice escaped quotes
final Process p = Runtime.getRuntime().exec(sb.toString());
于 2012-10-10T05:16:56.923 回答
0

您的方法是正确的,您只需要添加一个space (" ")before 参数并转义参数"/" and " "中的字符

于 2012-10-10T05:18:28.807 回答