Как я могу выполнить команду Java System (shell), которая имеет пробел в пути?
Я пробовал помещать кавычки и обратную косую черту(), но это не работает.
ln -s "dir1/dir2" "my\ dir/dir2"
Как я могу выполнить команду Java System (shell), которая имеет пробел в пути?
Я пробовал помещать кавычки и обратную косую черту(), но это не работает.
ln -s "dir1/dir2" "my\ dir/dir2"
Самым надежным способом является использование Runtime.exec(String [] cmdarray).
Если вы используете Runtime.exec(команда String), Java только разбивает команду на пробелы.
командная строка разбивается на токены, используя StringTokenizer, созданный вызовом new StringTokenizer (команда) без дальнейшей модификации категорий символов. Токены, созданные токенизатором, затем помещаются в новый массив строк cmdarray в том же порядке.
См. также g++: Файл не найден
Или используйте ProcessBuilder примерно следующее:
ProcessBuilder pb = new ProcessBuilder("ln", "-s", "dir1/dir2", "my dir/dir2");
Process p = pb.start();
Вам действительно нужно выполнить его в оболочке (например, вам нужно расширять оболочку таких вещей, как ~
или *
и т.д.)? Если нет, вы можете напрямую вызвать ln
:
Process p =
Runtime.getRuntime()
.exec(new String[]{"/bin/ln","-s","dir1/dir2", "my\\ dir/dir2"});
Если вам действительно нужна оболочка, попробуйте это (это может потребоваться небольшая настройка в зависимости от того, как оболочка обрабатывает кавычки):
Process p =
Runtime.getRuntime()
.exec(new String[]{"/bin/sh", "-c", "ln -s \"dir1/dir2\" \"my\\ dir/dir2\""});
Edit:
У меня было впечатление, что второй путь имеет буквальную обратную косую черту. Если он не должен удалять \\
из строковых литералов выше.
Ни одна из этих работ не работает над Львом. Однако следующее работает и обратно совместимо для Tiger.
Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","/path/to/file/space*init"});
Вы можете использовать его следующим образом, не вводя никаких обратных косых черт: Runtime.getRuntime().exec(new String[]{"ln", "-s", "dir1/dir2", "my dir/dir2"});