在C++中执行shell命令时强制环境bash



我正在C++中创建一个应用程序,它可以执行一些命令shell来获取有关系统的信息。当我在脚本代码中使用类似[[ "$devname" == "bus/"* ]]&& continue;的东西时,就会出现问题,执行此命令会返回错误,可能是因为在执行sheel脚本时,环境处于dash而不是bash中。我尝试用#!/usr/bin/env bash执行命令,但没有成功。完整的命令是内联硬编码的,我避免使用shell脚本文件。

如果您有这样的命令,请说:

[[ "$devname" == "bus/"* ]] && hostname || echo "no"

你可以这样运行:

bash -c '[[ "$devname" == "bus/"* ]] && hostname || echo "no"'

因此,如果您只构建一个包含上述内容的字符串,则可以使用popen()或其他方法运行它。在C++中,如果你真的使用上面的内容,你必须转义内部引号,所以:

const char* command = "bash -c '[[ "$devname" == "bus/"* ]] && hostname || echo "no"'";

您有两个选项:

1) 通过putenv():显式设置SHELL

putenv("SHELL=/bin/bash");
execl(...);

2) 显式执行/bin/bash,而不是依赖hashbang:

execl("/bin/bash", script.c_str(), NULL);
// script is the script you're trying to execute.

相关内容

  • 没有找到相关文章

最新更新