你好我正在尝试执行一个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: ""
我已经没想完了,有人知道为什么它不能正常工作吗?
答案 0 :(得分:1)
我不能说我完全理解您的问题,但在我看来,您正试图通过bash
脚本更新流程环境。这根本不可能。子进程可以永远修改其父进程的环境。
您的应用程序的进程不是 bash
(这是您的应用程序),因此无法“获取”shell脚本。如果您有环境设置bash
脚本,则可以使用以下选项:
在启动应用程序之前运行env-setup脚本(可能通过包装器bash
脚本启动应用程序)。
执行bash
作为子进程,让它获取脚本并从中检索相关信息(例如将环境写入bash
脚本中的标准输出并捕获其C ++中的标准输出)。为此,您可能需要查看QProcess
,尤其是QProcess::setReadChannel()
。