Расширение скобки оболочки (bash) с помощью Java runtime.exec

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

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

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


person David Young    schedule 10.05.2013    source источник


Ответы (1)


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

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

Источник.

person Mateusz    schedule 10.05.2013
comment
Как ни странно, это указывало на bash, а не только на sh, что решило это для меня. Мне нравится, что AIX делает все немного иначе, чем остальной мир... В любом случае, спасибо! - person David Young; 10.05.2013
comment
@David: Это не AIX. Оболочка Bourne (sh) не поддерживает раскрытие фигурных скобок. - person Dennis Williamson; 10.05.2013
comment
Я имел в виду, что в AIX на самом деле отличается не только sh/bash. В каждой системе Linux, с которой я работал в последнее время, sh и bash связаны символическими ссылками (не помню, как это происходит), но в любом случае выполняется один и тот же двоичный файл. - person David Young; 11.05.2013