繁体   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