質問

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

アイデア?

編集:バックスラッシュをエスケープ...まだworky

役に立ちましたか?

解決

日のフォーラムで、この問題の概要はありますの... OS X.

に限らず、かなり一般的な問題のようです

スレッドの最後のポストは、提案された解決策をまとめました。本質的に、Runtime.execアレイをとるString[]の形式を使用します:

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

「\」だけ「\」はシェルに渡され、シェルはスペースをエスケープする文字列、中に「\」を置く文字列にスペースを入れてますが、されます。

それが機能しない場合、

、各引数に、アレイとして引数に一つの要素を渡します。その方法は、シェルが参加しないと、あなたは奇妙なエスケープは必要ありません。

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"});
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top