Pregunta

En OS X, que estoy tratando de .exec algo, pero cuando una ruta contiene un espacio, no funciona. He intentado que rodea la ruta entre comillas, escapando el espacio, e incluso utilizando \ u0020.

Por ejemplo, esto funciona:

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

Pero si hay un espacio, ninguno de estos funciona:

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

Las ideas?

Editar:. Escapado barra invertida ... todavía no hay worky

¿Fue útil?

Solución

Hay un resumen de este problema en foros de Sun ... parece ser un asunto muy común no se limita a OS X.

El último mensaje en el hilo resume la solución propuesta. En esencia, utilizar la forma de Runtime.exec que toma un array String[]:

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

o (el foro sugiere que esto funcionará también)

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

Otros consejos

Prueba esto:

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

"\" se acaba de poner un espacio en la cadena, pero "\" pondrá un "\" en la cadena, que se pasa a la consola, y la cáscara escapará al espacio.

Si eso no funciona, pasar

en los argumentos como una matriz, un elemento para cada argumento. De esa manera la cáscara no se involucra y que no es necesario escapa extrañas.

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

opción de Pablo funciona, pero todavía debe escapar de los espacios de esta manera:

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

Lo que succiona sobre el uso de una matriz de cadenas es que cada parámetro y su opción deben estar en su propio elemento. Por ejemplo, usted no puede hacer esto:

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

Pero en lugar debe especificar que de esta manera:

Runtime.getRuntime().exec(new String[]{"executable", "-r", "-x", "1", "/folder\\ name/somefile"});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top