簡體   English   中英

OS X的java執行路徑中的空格

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM