我正在尝试使用C system()
调用合并一组文件:
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()
来电中启用参数扩展?
答案 0 :(得分:2)
原因是system
使用/bin/sh
,但不会扩展大括号。例如,尝试:
/bin/sh -c 'echo cat output{1,2}'
并比较
/bin/bash -c 'echo cat output{1,2}'
如果必须,请
system("/bin/bash -c 'cat output{1,2} > merged.out'");
但为什么不简单地读取这两个文件并将输出写入merged.out
?
答案 1 :(得分:1)
system
将命令传递给/bin/sh -c
。如果参数扩展无法按预期工作,/bin/sh
未与系统上的/bin/bash
相关联。您可以使用以下方法明确地启动bash shell:
return system("bash -c \"cat output{1,2} > merged.out\"");
答案 2 :(得分:1)
扩张是一项责任。像`system(" / usr / bin / bash -c \" cat output {1,2} \"> merged.out");"应该工作。