从java代码运行shell脚本并传递参数

时间:2012-10-10 05:12:13

标签: java shell runtime.exec shell-exec

我正在从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 个答案:

答案 0 :(得分:5)

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

ProcessBuilder pb = new ProcessBuilder("test.sh", "/path", "/my/text file");
Process p = pb.start();

答案 1 :(得分:0)

使用此:

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

答案 2 :(得分: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());

答案 3 :(得分:0)

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