我一直在使用类似于此示例的代码来从C ++中获取Linux shell命令的结果。它似乎适用于基本命令。但是,当我尝试使用示例中的命令运行它时,我得到shell错误:语法错误接近意外令牌`('
#include <stdio.h>
#include <iostream>
int main(int argc, char *argv[]) {
std::string cmdString = "cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | "
"awk -v RS=\"\" '{print ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5) }' 2>&1";
std::string result, file;
FILE *stream;
std::cout << "cmdString = " << cmdString << std::endl;
stream = popen(cmdString.c_str(), "r");
char buffer[256];
if(fgets(buffer, sizeof(buffer), stream) != NULL) {
file = buffer;
result += file.substr(0, file.size() - 1);
}
pclose(stream);
std::cout << "result = " << result << std::endl;
return 0;
}
我做错了吗?我需要以某种方式重新格式化字符串吗?
答案 0 :(得分:3)
您在命令行中使用sLogFolder = "c:\www\logs\LogFiles"
特定结构。 POSIX要求bash
的参数传递给popen
,而不是用户的当前shell。
要解决此问题,您可以执行以下操作之一:
bin/sh
- 兼容。/bin/sh
:bash