我需要在我的C++代碼以執行該命令: MKDIR -p sample_directory/{1..10} 使10個目錄。但是,當我在我的代碼中使用它的系統功能:使用C++系統();不工作
system("mkdir -p sample_director/{1..10}");
執行後,這個這個名字只是做一個目錄:{} 1..10 我怎樣才能解決這個問題?
我需要在我的C++代碼以執行該命令: MKDIR -p sample_directory/{1..10} 使10個目錄。但是,當我在我的代碼中使用它的系統功能:使用C++系統();不工作
system("mkdir -p sample_director/{1..10}");
執行後,這個這個名字只是做一個目錄:{} 1..10 我怎樣才能解決這個問題?
Brace擴展不在POSIX中,所以不是所有的shell都實現它。特別是在POSIX中,system
應該調用sh
,它應該像「普通」POSIX shell而不是bash
或其他一些功能豐富的shell一樣。所以它不會做大括號擴展。
你可以直接調用bash
,如果你想bash
處理命令
system("bash -c 'mkdir -p sample_director/{1..10}'");
,或者你可以只讓10個獨立system
電話。或者其他解決方法,我相信你可以想到一些。
你可以嘗試使用循環結構來做同樣的事情。
# 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
)對我來說似乎是更好的選擇。
我還沒有使用{1..10}創建目錄。試試{1,2,3,4,5,6,7,8,9,10}?這是否工作? – faadi
它不起作用,我的目錄名是:{1,2,3,4,5,6,7,8,9,10}, – Unix2000