سؤال

في 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"});

والشيء الذي تمتص حول استخدام مجموعة سلسلة هو أن كل المعلمة وخيارها يجب أن يكون في عنصر الخاصة بهم. على سبيل المثال لا يمكنك أن تفعل هذا:

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