0
我需要在新的控制檯窗口中啓動進程。對於mac,我發現了這樣的內容:Running a command in a new Mac OS X Terminal window其中要運行的命令以字符串形式傳遞。Java進程生成器生成命令
所以我做了一個給定一個字符串列表(如進程生成器)的方法,返回將在新的控制檯窗口中運行給定命令的字符串列表(最終命令)。我可以在給定的字符串上添加空格,而這些空格在大多數情況下都可以使用,但是我怎樣才能正確地轉義它?例如,我可以通過流程生成器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...'
};
}
我不認爲與控制檯命令做交易。例如,如果傳遞'Hello world'作爲參數之一,我需要它作爲'Hello \ world'逃脫空間太 – Raekye
我不明白你爲什麼需要逃生空間。當我們談論轉義時,通常是指那些會混淆編譯器/解析器的字符。在你的情況下,爲什麼ProcessBuilder不能滿足你的要求?或者,如果你的命令如此複雜,爲什麼不把所有腳本都放到腳本中,然後運行該腳本(可能是最小參數) – user650749
我創建的命令取決於用戶輸入。空間只是一個例子 - 基本上,我不是殼牌專家,也不知道我需要處理的其他任何情況。如果你說「我需要擔心的是帶有空格的令牌被引用並且引用了他們的引用」,那麼這就行了。不知道我有道理 - 那更清楚? – Raekye