在 C 程序中执行 bash 以导出环境变量
execute a bash in C program to export environment variable
你好,我正在尝试执行一个包含导出的 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()
.
相关文章:
- 枚举环境变量的惯用C++14/C++17方法
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 定义C++新的环境变量并在 bat 文件中使用它
- docker 构建失败:无法设置环境变量
- 如何在不传递命令行参数的情况下在 c++ 中设置环境变量
- C++环境变量
- 在编译时为运行时设置环境变量
- 如何使用可视化代码和平台IO将环境变量注入CPP文件?
- 访问 PlatformIO 中的外部环境变量
- WSL 看不到环境变量
- 如何在提升构建中设置环境变量以进行提升单元测试框架?
- 注册 TBB 的环境变量
- 如何设置Qt应用程序以使用类Unix系统的实际环境变量?
- CMake 看不到SDL2_PATH环境变量 (Windows)
- 跨语言共享环境变量
- 什么是运行英特尔线程构建模块的 XCode 8 环境变量
- 在运行时将更改的环境变量应用于 QApplication
- 如何使用CMakeLists.txt为我的可执行文件设置bash中的环境变量
- 在 C 程序中执行 bash 以导出环境变量
- 将环境变量传递给已启动的进程bash脚本