gpt4 book ai didi

c++ - 打开一个Shell程序,传递参数,返回结果

转载 作者:太空宇宙 更新时间:2023-11-04 10:53:55 25 4
gpt4 key购买 nike

我正在用 C++ 编写一个 shell 脚本,我正在尝试编写一种方法来通过比较系统运行时生成的输出和我的 shell diff-wise 来进行一些基本的单元测试。

基于对大量 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 或其他东西,但没有任何输出。我知道 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”时,您的意思是:

  1. 你执行“sudo”,传递一个参数“./shell”。

  2. sudo 运行“./shell”(作为 root,但这与此处无关)。

  3. “shell”可执行文件提示输入某种命令,您键入“ls”并获得输出。

您正在尝试通过以下代码片段使其自动化:

popen("sudo ./shell ls ", "r")

这是做什么的

  1. 执行“sudo”,并向“sudo”命令传递两个参数:“./shell”和“ls”。

这与第一部分中的步骤 1 到 3 完全不同;这就是它不起作用的原因。

您要做的最简单的事情是修改“./shell”以支持将命令作为参数传递给它的替代调用方式,而不是让“./shell”以交互方式提示执行命令。

关于c++ - 打开一个Shell程序,传递参数,返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29594747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com