Question

Sur OS X, je suis en train de .exec quelque chose, mais quand un chemin contient un espace, il ne fonctionne pas. J'ai essayé entourant le chemin avec des citations, échappant de l'espace, et même en utilisant \ u0020.

Par exemple, cela fonctionne:

Runtime.getRuntime().exec("open /foldername/toast.sh");

Mais s'il y a un espace, aucun de ces travaux:

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

Idées?

Edit:. Backslash ... toujours pas worky

Était-ce utile?

La solution

Il y a un résumé de ce problème sur forums de Sun ... semble être un problème assez commun ne se limite pas à OS X.

Le dernier message dans le fil résume la solution proposée. En substance, utilisez la forme de Runtime.exec qui prend un tableau de String[]:

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

ou (le forum suggère que cela fonctionne aussi)

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

Autres conseils

Essayez ceci:

Runtime.getRuntime().exec("open /folder\\ name/toast.sh");

« \ » va juste mettre un espace dans la chaîne, mais « \ » va mettre un « \ » dans la chaîne, qui sera transmis à la coquille et la coquille s'échapper à l'espace.

Si cela ne fonctionne pas, passer les arguments comme un tableau, un élément pour chaque argument. De cette façon, la coquille ne soit pas impliqué et vous n'avez pas besoin évasions bizarres.

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

option de Paul fonctionne, mais vous devez toujours échapper aux espaces comme ceci:

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

La chose qui aspire à utiliser un tableau de chaînes est que chaque param et son choix doit être dans leur propre élément. Par exemple, vous ne pouvez pas faire ceci:

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

Mais au lieu doit le spécifier ainsi:

Runtime.getRuntime().exec(new String[]{"executable", "-r", "-x", "1", "/folder\\ name/somefile"});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top