在OS X上,我正在尝试.exec,但是当路径包含空格时,它不起作用。我试过用引号围绕路径,逃避空间,甚至使用\ u0020。
例如,这有效:
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");
想法?
编辑:Escaped反斜杠......仍然没有用。
答案 0 :(得分:12)
Sun's forums上有关于此问题的摘要...似乎是一个非常常见的问题,不仅限于OS X.
该主题中的最后一篇文章总结了所提出的解决方案。实质上,使用带有Runtime.exec
数组的String[]
形式:
String[] args = new String[] { "open", "\"/folder name/toast.sh\"" };
或(论坛建议这也会起作用)
String[] args = new String[] { "open", "folder name/toast.sh" };
答案 1 :(得分:1)
试试这个:
Runtime.getRuntime().exec("open /folder\\ name/toast.sh");
“\”只会在字符串中放置一个空格,但“\”会在字符串中放入一个“\”,它将传递给shell,而shell将转义空格。
如果这不起作用,请将参数作为数组传入,每个参数一个元素。这样shell就不会涉及到你并不需要奇怪的逃脱。
Runtime.getRuntime().exec(new String[]{"open", "/folder name/toast.sh"});
答案 2 :(得分:0)
保罗的选择有效,但你仍然必须逃离这样的空间:
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"});