很多时候程序希望对配置参数做环境变量替换,这样自己省力用户也省力。
通过env去一个一个替换当然是个办法,但是很麻烦啊,而且也不知道执行效果和用户以为的是不是一样。
通过shell功能去做就比较简单了,而且效果和shell完全一致,用户不会迷惑。
办法也很简单,执行echo指令,然后获取输出即可。获取输出有几种办法:
代码:
- string & GetShellOutput(char const * cmd, string & output)
- {
- char buf[1024];
- FILE * pf;
-
- output = "";
- //DEBUG_LOG << cmd << endi;
- if (NULL == (pf = popen(cmd, "r")))
- {
- thelog << "popen失败,无法执行环境变量替换 " << strerror(errno) << ende;
- return output;
- }
- while (NULL != fgets(buf, 1024, pf))
- {
- output += buf;
- }
- //DEBUG_LOG << output << endi;
- pclose(pf);
- return output;
- }
- string & ShellEnvReplace(string & str)
- {
- string cmd = "echo " + str;
- bool hasNewLine = (str.size() > 0 && '\n' == str[str.size() - 1]);
- GetShellOutput(cmd.c_str(), str);
- if (!hasNewLine)str.erase(str.size() - 1);
- return str;
- }
ShellEnvReplace执行环境变量替换,核心功能由GetShellOutput实现,自身额外处理了新行问题。这个方法获得的输出一定会包含一个换行符,如果输入字符串原来不是以换行符结束的就把输出的最后一个字符删掉。
GetShellOutput详细参见:程序设计:C语言 调用命令行程序并获得输出 popen(源码)-CSDN博客
(这里是结束)