[英]Spaces in java execute path for OS X
在 OS X 上,我正在嘗試 .exec 某些東西,但是當路徑包含空格時,它不起作用。 我試過用引號包圍路徑,轉義空間,甚至使用\ 。
例如,這有效:
Runtime.getRuntime().exec("open /foldername/toast.sh");
但如果有空間,這些都不起作用:
Runtime.getRuntime().exec("open /folder name/toast.sh");
Runtime.getRuntime().exec("open \"/folder name/toast.sh\"");
Runtime.getRuntime().exec("open /folder\\ name/toast.sh");
Runtime.getRuntime().exec("open /folder\u0020name/toast.sh");
想法?
編輯:轉義的反斜杠......仍然沒有工作。
在Sun的論壇上有一個關於這個問題的摘要......似乎是一個非常常見的問題,不僅限於OS X.
該主題中的最后一篇文章總結了所提出的解決方案。 實質上,使用帶有String[]
數組的Runtime.exec
形式:
String[] args = new String[] { "open", "\"/folder name/toast.sh\"" };
或(論壇建議這也會起作用)
String[] args = new String[] { "open", "folder name/toast.sh" };
試試這個:
Runtime.getRuntime().exec("open /folder\\ name/toast.sh");
“\\”只會在字符串中放置一個空格,但“\\”會在字符串中放入一個“\\”,它將被傳遞給shell,而shell將轉義空格。
如果這不起作用,請將參數作為數組傳入,每個參數一個元素。 這樣shell就不會涉及到你並不需要奇怪的逃脫。
Runtime.getRuntime().exec(new String[]{"open", "/folder name/toast.sh"});
保羅的選擇有效,但你仍然必須逃離這樣的空間:
Runtime.getRuntime().exec(new String[]{"open", "/folder\\ name/toast.sh"});
使用String數組很糟糕的是每個param及其選項必須在它們自己的元素中。 例如,你不能這樣做:
Runtime.getRuntime().exec(new String[]{"executable", "-r -x 1", "/folder\\ name/somefile"});
但是必須像這樣指定它:
Runtime.getRuntime().exec(new String[]{"executable", "-r", "-x", "1", "/folder\\ name/somefile"});
在 Kotlin 中,我能夠使用模板字符串轉義空格。
private const val chromeExec = "/Applications/Google
Chrome.app/Contents/MacOS/Google Chrome"
Runtime.getRuntime().exec(arrayOf("$browserExec", url))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.