Вопрос

В 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 /folder\u0020name/toast.sh");

Идеи?

Редактировать:Сбежавшая обратная косая черта...все еще не работает.

Это было полезно?

Решение

Краткое описание этой проблемы есть на Форумы 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"});

Проблема в использовании массива String заключается в том, что каждый параметр и его опция должны находиться в своем собственном элементе.Например, вы не можете сделать это:

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

Но вместо этого необходимо указать это так:

Runtime.getRuntime().exec(new String[]{"executable", "-r", "-x", "1", "/folder\\ name/somefile"});
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top