2013-05-10 2 views
2

Я пытаюсь получить команду расширения для работы с runtime.exec, но скобки интерпретируются как литералы, а не расширяются. Вот что я пытаюсь сделать:Расширение скобки оболочки (bash) с использованием Java runtime.exec

String command = "mkdir -p Foldername{1,2,3}/InnerFolder"; 
Runtime.getRuntime().exec(new String[] { "sh", "-c", command }); 

К сожалению, это дает мне одну папку в моем текущем каталоге с именем «имя_папки {1,2,3}» вместо «Foldername1», «Foldername2», и "Foldername3". Кто-нибудь знает, как предотвратить кодирование фигур как литералов?

ответ

3

Вы пытаетесь использовать подстановочные знаки Bash. Они интерпретируются в оболочке Bash. Вы используете mkdir напрямую, поэтому нет интерпретации оболочки для {}. Вам необходимо указать путь к оболочке

String command = "mkdir -p Foldername{1,2,3}/InnerFolder"; 
Runtime.getRuntime().exec(new String[] { "/bin/bash", "-c", command }); 

Source.

+0

Как ни странно, он указывал «bash», а не просто «sh», который решил это для меня. Должен любить, как AIX делает все немного иначе, чем остальная часть мира ... Независимо от того, спасибо! –

+0

@David: Это не AIX. Оболочка Bourne ('sh') не поддерживает расширения фигурных скобок. –

+0

Я имел в виду больше, чем sh/bash на самом деле отличается от AIX. В каждой системе Linux, с которой я был в последнее время, sh и bash имеют символическую связь (не помню, как это происходит), но один и тот же двоичный файл выполняется в любом случае. –