我正在从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代码实现相同的功能,我需要将此路径与空格作为单个参数进行考虑。任何请你真的很感激。
答案 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 " "
个字符