9

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");

アイデア?

編集:バックスラッシュをエスケープしました...まだうまくいきません。

4

4 に答える 4

13

Sun のフォーラムにこの問題の概要があります... OS X に限定されないかなり一般的な問題のようです。

スレッドの最後の投稿は、提案されたソリューションを要約しています。本質的に、配列Runtime.execを取るの形式を使用します。String[]

String[] args = new String[] { "open", "\"/folder name/toast.sh\"" }; 

または(フォーラムはこれも機能することを示唆しています)

String[] args = new String[] { "open", "folder name/toast.sh" };
于 2009-03-30T15:22:47.917 に答える
0

Paulのオプションは機能しますが、それでも次のようにスペースをエスケープする必要があります。

Runtime.getRuntime().exec(new String[]{"open", "/folder\\ name/toast.sh"});

文字列配列を使用するのが面倒なのは、各パラメータとそのオプションが独自の要素に含まれている必要があることです。たとえば、これを行うことはできません。

Runtime.getRuntime().exec(new String[]{"executable", "-r -x 1", "/folder\\ name/somefile"});

ただし、代わりに次のように指定する必要があります。

Runtime.getRuntime().exec(new String[]{"executable", "-r", "-x", "1", "/folder\\ name/somefile"});
于 2009-12-07T20:18:13.463 に答える