Domanda

Su OS X, sto cercando di .exec qualcosa, ma quando un percorso contiene uno spazio, non funziona. Ho provato che circonda il percorso con le citazioni, sfuggendo lo spazio, e anche utilizzando \ u0020.

Ad esempio, questo funziona:

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

Ma se c'è uno spazio, nessuno di questi lavori:

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

idee?

Modifica:. Fuggito backslash ... ancora worky

È stato utile?

Soluzione

C'è una sintesi di questo problema su forum di Sun ... sembra essere un problema piuttosto comune, non limitato a OS X.

L'ultimo post nel thread riassume la soluzione proposta. In sostanza, usa il modulo di Runtime.exec che prende una matrice String[]:

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

o (il forum suggerisce che questo funzionerà ugualmente)

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

Altri suggerimenti

Prova questo:

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

"\" sarà solo inserire uno spazio nella stringa, ma "\" metterà un "\" nella stringa, che sarà passato alla shell, e la shell sfuggirà lo spazio.

Se questo non funziona, passare gli argomenti come una matrice, un elemento per ogni argomento. In questo modo la shell non essere coinvolti e non hai bisogno di fughe bizzarre.

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

opzione di Paul funziona, ma è comunque necessario sfuggire gli spazi in questo modo:

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

La cosa che fa schifo sull'utilizzo di un array di stringhe è che ogni param e la sua opzione devono essere nel loro proprio elemento. Per esempio, non si può fare questo:

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

Ma invece deve specificare in questo modo:

Runtime.getRuntime().exec(new String[]{"executable", "-r", "-x", "1", "/folder\\ name/somefile"});
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top