在 C++ 中使用 system();不起作用
using system() in C++;does not work
我需要在我的 C++ 代码中执行这个命令:
mkdir -p sample_directory/{1..10}
制作10个目录。但是当我在代码的系统函数中使用它时:
system("mkdir -p sample_director/{1..10}");
执行后只创建一个目录,名称为:{1..10}
我该如何解决?
您或许可以尝试使用循环结构来做同样的事情。
# 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
它不起作用,因为 dash
不支持大括号扩展(类似于 {1..10}
的语法)。 system
函数不关心 SHELL
的值,它总是将提供的参数传递给 /bin/sh
。而在 Ubuntu 上 /bin/sh
指的是 dash
,它无法处理大括号扩展。在其他一些发行版(如 Arch)上,/bin/sh
是 bash
的符号链接,因此您的代码可以正常工作。
如果我是你,在这种情况下我根本不会使用 system
。 Boost::filesystem
(甚至 mkdir
/mkdirat
)对我来说似乎是更好的选择。
大括号扩展不在 POSIX 中,因此并非所有 shell 都实现它。特别是,在 POSIX 中,system
应该调用 sh
,它应该像 "plain" POSIX shell 而不是 bash
或其他一些功能丰富的 shell。所以它不会进行大括号扩展。
如果您希望bash
处理命令,您可以直接调用bash
...
system("bash -c 'mkdir -p sample_director/{1..10}'");
或者您可以单独进行 10 次 system
调用。或者其他解决方法,我相信你能想到一些。
我需要在我的 C++ 代码中执行这个命令: mkdir -p sample_directory/{1..10} 制作10个目录。但是当我在代码的系统函数中使用它时:
system("mkdir -p sample_director/{1..10}");
执行后只创建一个目录,名称为:{1..10} 我该如何解决?
您或许可以尝试使用循环结构来做同样的事情。
# 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
它不起作用,因为 dash
不支持大括号扩展(类似于 {1..10}
的语法)。 system
函数不关心 SHELL
的值,它总是将提供的参数传递给 /bin/sh
。而在 Ubuntu 上 /bin/sh
指的是 dash
,它无法处理大括号扩展。在其他一些发行版(如 Arch)上,/bin/sh
是 bash
的符号链接,因此您的代码可以正常工作。
如果我是你,在这种情况下我根本不会使用 system
。 Boost::filesystem
(甚至 mkdir
/mkdirat
)对我来说似乎是更好的选择。
大括号扩展不在 POSIX 中,因此并非所有 shell 都实现它。特别是,在 POSIX 中,system
应该调用 sh
,它应该像 "plain" POSIX shell 而不是 bash
或其他一些功能丰富的 shell。所以它不会进行大括号扩展。
如果您希望bash
处理命令,您可以直接调用bash
...
system("bash -c 'mkdir -p sample_director/{1..10}'");
或者您可以单独进行 10 次 system
调用。或者其他解决方法,我相信你能想到一些。