我需要在我的c ++代码中执行此命令: mkdir -p sample_directory / {1..10} 制作10个目录。但是当我在我的代码中的系统函数中使用它时:
system("mkdir -p sample_director/{1..10}");
执行后,只需使用此名称创建一个目录: {1..10} 我该如何解决?
答案 0 :(得分:1)
你可以尝试使用循环结构来做同样的事情。
# include <cstdlib>
# include <string>
using namespace std;
int main(){
for(int i=1;i<=10;i++){
string str="mkdir -p sample_director/" + to_string(i);
system(str.c_str());
}
return 0;
}
使用c++11
支持
$ g++ -std=c++11 my_program.cpp
答案 1 :(得分:1)
Braix扩展不在POSIX中,因此并非所有shell都实现它。特别是在POSIX中,system
应该调用sh
,它应该像“普通”POSIX shell而不是bash
或其他一些功能丰富的shell。所以它不会做支撑扩展。
如果您希望bash
处理命令,您可以直接调用bash
...
system("bash -c 'mkdir -p sample_director/{1..10}'");
或者您可以进行10次单独的system
来电。或者其他解决方法,我相信你能想到一些。
答案 2 :(得分:0)
它不起作用,因为dash
不支持大括号扩展(类似{1..10}
的语法)。 system
函数不关心SHELL
的值,它总是将提供的参数传递给/bin/sh
。在Ubuntu /bin/sh
上引用dash
,它不能处理大括号扩展。在其他一些发行版(如Arch)上,/bin/sh
是bash
的符号链接,因此您的代码可以正常工作。
如果我是你,在这种情况下我根本不会使用system
。 Boost::filesystem
(甚至mkdir
/ mkdirat
)似乎对我来说是更好的选择。