Pergunta

No OS X, eu estou tentando .exec alguma coisa, mas quando um caminho contém um espaço, ele não funciona. Eu tentei em torno do caminho com aspas, escapando do espaço, e até mesmo usando \ u0020.

Por exemplo, isso funciona:

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

Mas se há um espaço, nenhum desses trabalhos:

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éias?

Edit:. Barra invertida ... ainda não worky

Foi útil?

Solução

Há um resumo do problema na fóruns da Sun ... parece ser um problema bastante comum não se restringe ao OS X.

O último post no tópico resume a solução proposta. Em essência, use o formulário de Runtime.exec que leva uma matriz String[]:

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

ou (o fórum sugere que isso vai funcionar também)

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

Outras dicas

Tente isto:

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

"\" vai apenas colocar um espaço na seqüência, mas "\" vai colocar um "\" na cadeia, que será passado para o shell eo shell vai escapar do espaço.

Se isso não funcionar, passe nos argumentos como uma matriz, um elemento para cada argumento. Dessa forma, o shell não se envolver e você não precisa de escapes bizarros.

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

O Paul obras de opção, mas você ainda deve escapar os espaços assim:

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

A única coisa que suga sobre o uso de uma matriz de String é que cada param e sua opção deve estar em seu próprio elemento. Por exemplo, você não pode fazer isso:

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

Mas, em vez deve especificá-lo assim:

Runtime.getRuntime().exec(new String[]{"executable", "-r", "-x", "1", "/folder\\ name/somefile"});
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top