JavaでスペースはOS X用のパスを実行します
質問
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"});
所属していません StackOverflow