我尝试了命令
cat tmp/file{1..3} > newFile
并且完美无缺
但是当我编译并执行以下c程序时
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main() {
char command[40];
int num_of_points = 3;
sprintf(command,"cat tmp/file{1..%d} > file.Ver",num_of_points);
system(command);
}
消息
cat: tmp/file{1..3}: No such file or directory
出现
似乎系统没有进行大括号扩展
答案 0 :(得分:2)
似乎系统没有进行大括号扩展
问题是system()
调用的shell,它不是Bash,而是另一个不支持大括号扩展的shell。
您仍然可以使用bash
选项致电-c
,以便将bash
与system()
一起使用。例如:
system("bash -c 'echo The shell is: $SHELL'")
bash
本身将在另一个shell之上运行(即:shell system()
调用),但echo
命令肯定会在Bash中运行。
在代码中应用相同的原则:
sprintf(command,"bash -c 'cat tmp/file{1..%d} > file.Ver'",num_of_points);
将创建您需要传递给command
的正确system()
字符串,以便在Bash中运行命令cat tmp/file{1..%d} > file.Ver
并执行大括号扩展。
答案 1 :(得分:0)
system
命令的手册页说:
“system()
通过调用/ bin / sh -c命令”
所以它不会执行类似bash的大括号扩展。
我建议你在一个循环中将文件串一起构建到cat
,但要注意你不要溢出command
缓冲区。