我需要在新的控制台窗口中启动一个进程。对于Mac,我发现了以下内容:Running a command in a new Mac OS X Terminal window其中要运行的命令以字符串形式传递。

因此,我制作了一种方法,该方法给出了一个字符串列表(如流程生成器),返回了字符串列表(最终命令),该列表将在新的控制台窗口中运行给定命令。我可以在给定的字符串后加上空格,这在大多数情况下都可以使用,但是如何正确地对其进行转义呢?例如,我可以通过流程生成器new String[] { "echo", "hello world" },而实际上它是echo "hello world"。它也处理许多其他情况(我认为)。

我认为解释很复杂,所以这里是一个伪存根:

public static String[] getConsoleCommand(String[] command) {
    if operating system is Mac...
        String commandString = concatenate command...
        return new String[] { "osascript", "-e",
            String.format("'tell application \"Terminal\" to do script \"%s\"'",
                        commandString.replace("'", "\\\'")) // escape single quote used in 'tell application...'
        };
}

最佳答案

import org.apache.commons.lang.StringEscapeUtils;

for(int i = 0;i <arrayCommand.length();i++) {
  arrayCommand[i] = StringEscapeUtils.escapeJava(unescapedJava);
}

关于java - Java ProcessBuilder获取构建命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15713982/

10-11 22:24
查看更多