gpt4 book ai didi

c++ - 从 C++ 程序获取 bash $PATH

转载 作者:行者123 更新时间:2023-12-04 14:01:40 26 4
gpt4 key购买 nike

在终端应用程序中,我的 $PATH 是:

/usr/local/opt/python/libexec/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin

如果用户使用 Dock 启动我的 C++ 应用程序,它的 $PATH 是:

/usr/bin:/bin:/usr/sbin:/sbin

我希望我的应用程序始终具有与终端 (bash) 相同的 $PATH。有没有一种简单的方法可以实现这一目标?

目前我知道的唯一方法是在磁盘上使用类似echo $PATH 的东西创建一个 bash 脚本,使用 bash -l< 从我的 C++ 程序启动它 命令,读取输出并相应地更新我进程的 PATH 变量。

而且,我不想以任何方式更改用户系统的配置。这应该可以在不需要用户执行任何额外操作的情况下工作,并且不会以任何方式影响用户的系统。

最佳答案

如果您不喜欢调用 bash 的解决方案,这里有一个 stub ,用于对调用 shell 进行更多控制,并可能测试用户默认 shell 是否不是 bash 全部来自 c++ 程序:

setenv("路径", "/MyCustomPath:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin", 1);

读取 bash 的路径:

std::string exec(const char* cmd) {
char buffer[128];
std::string result = "";
FILE* pipe = popen(cmd, "r");
if (!pipe) throw std::runtime_error("popen() failed!");
try {
while (fgets(buffer, sizeof buffer, pipe) != NULL) {
result += buffer;
}
} catch (...) {
pclose(pipe);
throw;
}
pclose(pipe);
return result;
}

setenv("PATH", exec("bash -l -c 'echo -n $PATH'").c_str(), 1);

关于c++ - 从 C++ 程序获取 bash $PATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69808960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com