我正在寫一個shell腳本在C++中,我試圖編寫一種方法來做一些基本的單元測試,比較運行時產生的輸出系統和我的外殼差異。打開Shell程序,傳遞參數,並返回結果
基礎上,通過StackOverflow的文章很多讀書,這是我使用捕捉到一個簡單的ls命令的輸出內容:
FILE *syst;
char buff[512];
string systout ("");
if(!(syst = popen("ls ", "r"))){
cout << "Failed! " << endl;
return 1;
}
while(fgets(buff, sizeof(buff), syst)!=NULL){
systout.append(buff);
}
fflush(syst);
pclose(syst);
這一切正常。
問題是我無法找到一種方法讓我的shell腳本工作。 通常我運行它使用sudo ./shell
,然後ls
。
這就是我現在所擁有的,但它不起作用。我認爲它沒有找到我的外殼或什麼,但沒有輸出。我知道shell是可以工作的,因爲我已經手動運行它,並且結果與預期的結果相匹配。
FILE *shel;
char buff2[512];
string shelout ("");
if(!(shel = popen("sudo ./shell ls ", "r"))){
cout << "Failed! " << endl;
return 1;
}
while(fgets(buff2, sizeof(buff2), shel)!=NULL){
shelout.append(buff2);
}
fflush(shel);
pclose(shel);
任何想法?
「通常我用'sudo。/ shell'運行它,然後運行'ls'。」所以在我看來,這與運行'sudo ./shell ls'不是一回事。也許你想寫字符串'ls'到子進程的STDIN? –
你應該用'sudo'運行你的程序,並且在不加前綴的情況下調用腳本,但這取決於你在做什麼。 –