在C程序中执行bash以导出环境变量

时间:2014-02-21 16:07:24

标签: c++ bash export environment-variables system

你好我正在尝试执行一个bash文件,里面有导出,这就是我的Cpp程序。

目标是在我的一个程序开始时自动设置我需要的环境变量。

我似乎无法使其发挥作用。

我的myExport.sh:

export LOG4CXXCONFFILE="/home/me/workspace/Log/log4cxx.properties"

我的代码是:

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    qDebug() << system(" bash myExport.sh");
    try
    {
        QString myFile = getenv("LOG4CXXCONFFILE");
        qDebug() << "my env variable directory path:"<< myFile;
    }
    catch(Exception&)
    {
        result = "EXIT_FAILURE";
    }
return a.exec();
}

我的调试显示它有效,但我无法获得环境。变量:

  

0
  我的env变量目录路径:“”

我认为这可能是因为脚本只在其运行的子shell中设置环境,所以我试过:

qDebug() << system(". ./myExport.sh");

这给了我相同的答案。

所以我也试过了:

qDebug() << system("source myExport.sh");

答案是:

sh: 1: source: not found
32512 
my env variable directory path: ""
我试过了:

qDebug() << system("bash source myExport.sh");
bash: source: Aucun fichier ou dossier de ce type   (no file or directory of this type, don't know why this is the only error in french)
32512 
my env variable directory path: ""

我已经没想完了,有人知道为什么它不能正常工作吗?

1 个答案:

答案 0 :(得分:1)

我不能说我完全理解您的问题,但在我看来,您正试图通过bash脚本更新流程环境。这根本不可能。子进程可以永远修改其父进程的环境。

您的应用程序的进程不是 bash(这是您的应用程序),因此无法“获取”shell脚本。如果您有环境设置bash脚本,则可以使用以下选项:

  1. 在启动应用程序之前运行env-setup脚本(可能通过包装器bash脚本启动应用程序)。

  2. 执行bash作为子进程,让它获取脚本并从中检索相关信息(例如将环境写入bash脚本中的标准输出并捕获其C ++中的标准输出)。为此,您可能需要查看QProcess,尤其是QProcess::setReadChannel()