你好,我正在尝试执行一个包含导出的 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();
}
我的调试显示它有效,但我无法获得 env. 变量:
0 我的环境变量目录路径:"
我想这可能是因为脚本只在它运行的子壳中设置环境,所以我尝试了:
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: ""
我没主意了,有人知道为什么它不起作用吗?
我不能说我完全理解你的问题,但在我看来,你正在尝试通过bash
脚本更新你的进程的环境。这根本不可能。子进程永远不能修改其父进程的环境。
而且你的应用程序的进程不是bash
的(它是你的应用程序),所以它不能"获取"shell脚本。如果您有环境设置bash
脚本,则有以下选项:
-
在启动应用程序之前运行 env 安装程序脚本(可能通过包装器
bash
脚本启动应用程序)。 -
将
bash
作为子进程执行,让它获取脚本并从中检索相关信息(例如,将环境写入bash
脚本中的标准输出,并在C++中捕获其标准输出)。为此,您可能需要查看QProcess
,尤其是QProcess::setReadChannel()
.