Bash 扩展在 popen 中不起作用
Bash expansion does not work in popen
我有一大 collection 个文件,从 file1.txt
到 file1000000.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 膨胀不能通过管道工作?
这里有什么解决方案?
感谢@Burhan Khalid 和@hobbs。似乎 popen 没有使用 bash 作为管道。为了使用 bash,我将 popen 行修改为:
FILE* pipe = popen("exec bash -c 'cp files/file{100..102}.txt filesCopy'", "r");
扩展现在工作正常。
我有一大 collection 个文件,从 file1.txt
到 file1000000.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 膨胀不能通过管道工作?
这里有什么解决方案?
感谢@Burhan Khalid 和@hobbs。似乎 popen 没有使用 bash 作为管道。为了使用 bash,我将 popen 行修改为:
FILE* pipe = popen("exec bash -c 'cp files/file{100..102}.txt filesCopy'", "r");
扩展现在工作正常。