2014-04-06 1 views
1

나는 C에게 system() 전화 사용하여 파일의 집합 병합하기 위해 노력하고있어 :C 시스템() 호출 매개 변수 확장

int main(int argc, char* argv[]) { 
    return system("cat output{1,2} > merged.out"); 
} 

결과입니다 : 내가 직접 그것을 할 경우

$ gcc test.c 
$ ./a.out 
cat: output{1,2}: No such file or directory 

그것은 작동 bash는 :

$ ls output{1,2} 
output1 output2 
$ cat output{1,2} 
1,2 
3,4 

은 어떻게 system() 호출 매개 변수 확장을 가능하게 할 수 있습니까?

답변

2

그 이유는 system 중괄호를 확장하지 않습니다 /bin/sh를 사용한다는 것입니다. ,

system("/bin/bash -c 'cat output{1,2} > merged.out'"); 

그런데 왜 단순히 두 파일을 읽고 merged.out에 출력을 쓰지 같은 것을

/bin/sh -c 'echo cat output{1,2}' 

을 당신이해야하는 경우

/bin/bash -c 'echo cat output{1,2}' 

비교 : 예를 들어, 시도?

+0

(예 :/usr/bin/bash -c \ "cat output {1,2 \}"merged.out " 귀하의 설명 주셔서 감사합니다. 왜냐하면 나는 현재 입력을 나누기 위해'split'을 사용하고 같은 결과를 병합에 사용하기를 원하기 때문입니다. 약간의 이식성 문제가 있다는 것을 알고 있지만 나중에 해결할 것입니다 – Yang

1

system/bin/sh -c에 명령을 전달합니다. 매개 변수 확장이 예상대로 작동하지 않는 경우 /bin/sh은 시스템의 /bin/bash에 연결되어 있지 않습니다. 당신은 명시 적으로이를 사용하여 bash 쉘을 시작할 수 있습니다

return system("bash -c \"cat output{1,2} > merged.out\""); 
+0

감사합니다. – Yang

+0

당신은 환영합니다 :) – hek2mgl

1

확장은 쉘 임무입니다.

+0

고마워요. 내 시스템에서'/ bin/bash '이다. – Yang