用系统功能支持c程序扩展

时间:2017-11-27 11:12:14

标签: c bash system brace-expansion

我尝试了命令

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

出现

似乎系统没有进行大括号扩展

2 个答案:

答案 0 :(得分:2)

  

似乎系统没有进行大括号扩展

问题是system()调用的shell,它不是Bash,而是另一个不支持大括号扩展的shell。

您仍然可以使用bash选项致电-c,以便将bashsystem()一起使用。例如:

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缓冲区。