Пробелы в java execute path для OS X



На 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 /folderu0020name/toast.sh");


Идеи?



Edit: экранированная обратная косая черта... все еще без работы.

605   3  

3 ответов:

Есть краткое изложение этой проблемы на форумахSun ... кажется, это довольно распространенная проблема, не ограниченная 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"});

Comments

    Ничего не найдено.