Bash扩展在popen中不起作用

时间:2015-01-18 06:22:15

标签: c bash popen

我有file1.txtfile1000000.txt的大量文件,这些文件都存储在文件夹files中。我需要将命令行中的一系列文件复制到文件夹filesCopy。我使用bash扩展如下,一切正常:

cp files/file{100..102}.txt filesCopy

但是,通过popen使用相同的命令会给我错误。

FILE* pipe = popen("cp files/file{100..102}.txt filesCopy", "r");

if (!pipe)
    throw("ERROR!");
char buffer[128];
string result = "";
while(!feof(pipe)) 
{
    if(fgets(buffer, 128, pipe) != NULL)
        result += buffer;
}
pclose(pipe);

这里有什么不对? bash扩展是否可能无法通过管道工作?

这里有什么解决方案?

1 个答案:

答案 0 :(得分:2)

感谢@Burhan Khalid和@hobbs。似乎popen不使用bash进行管道。为了使用bash,我将popen行修改为:

FILE* pipe = popen("exec bash -c 'cp files/file{100..102}.txt filesCopy'", "r");

现在扩展工作正常。