2013-05-10 8 views
2

runtime.exec와 함께 작동하도록 확장 명령을 얻으려고하고 있지만 중괄호가 확장되지 않고 리터럴로 해석됩니다. 여기에 내가 할 노력하고있어 무엇 : 나에게 이름을 내 현재의 디렉토리에있는 하나의 폴더 준다,Java의 runtime.exec을 사용하여 쉘 (bash) 중괄호 확장

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

을 불행하게도 "폴더 이름을 {1,2,3}"대신 "폴더 이름 1", "폴더 이름 2"와 "Foldername3". 누구든지 중괄호가 리터럴로 해석되지 않도록하는 방법을 알고 있습니까?

답변

3

배쉬 와일드 카드를 사용하려고합니다. 이들은 Bash 쉘에서 해석됩니다. mkdir을 직접 실행 중이므로 {}을 해석 할 쉘이 없습니다. 셸에 대한 경로를 지정해야합니다.

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

Source

+0

이상하게도 나를 위해 해결 한 것은 "sh"가 아니라 "bash"를 지정하는 것입니다. AIX가 어떻게 모든 일을 세계 다른 지역과 조금씩 다르게하는지에 대해 알고 싶습니다. 감사합니다. –

+0

@David : 그것은 AIX가 아닙니다. Bourne 쉘 ('sh')은 중괄호 확장을 지원하지 않습니다. –

+0

나는 sh/bash가 AIX에서 실제로 다르다는 것을 의미했다. 최근에 제가 사용 해본 모든 리눅스 시스템에서 sh와 bash는 심볼릭 링크되어 있습니다 (어떤 방식으로 실행되는지 기억하지 못합니다). 그러나 두 경우 모두 동일한 바이너리가 실행됩니다. –