gpt4 book ai didi

linux - qgetenv 返回 NULL

转载 作者:太空宇宙 更新时间:2023-11-04 11:20:56 24 4
gpt4 key购买 nike

我需要在 linux(UBUNTU) 中获取环境变量的值。为此,我使用带有环境变量名称的“qgetenv”函数。我可以确认环境变量的值已设置,因为当我回显 $VARIABLE_NAME 时,它完美地打印了变量的值。我正在使用的这段代码:

  QByteArray root  = qgetenv("PAPARAZZI_HOME");
if (root.data()==NULL) {
cerr << "PAPARAZZI_HOME is not defined" << endl;
exit(0);
}
string pprzRoot = string(root.data());

并且 echo $PAPARAZZI_HOME 打印以下字符串:
“/home/manish/paprazzi-git/paparazzi/”。
我正在使用
sudo "Path to Application Dir"/"Application Name".

调用我的程序

答案:“sudo”删除大部分用户的环境变量。因此,如果想与 sudo 一起保留环境变量,则必须使用 sudo -E。有关详细信息,请参阅“man sudo”。

最佳答案

拥有

$ echo $PAPARAZZI_HOME

打印预期值不验证 $PAPARAZZI_HOME 是一个环境变量。它可能是一个未导出的 shell 变量。

如果您通过在 shell 提示符下键入以下内容来设置它:

$ PAPARAZZI_HOME=/home/manish/paprazzi-git/paparazzi/

那么它就不是环境变量了。试试这个:

$ export PAPARAZZI_HOME=/home/manish/paprazzi-git/paparazzi/

然后再次运行你的程序。或者,如果您已经为其分配了一个值:

$ export PAPARAZZI_HOME

一些较旧的 shell,例如原始的 sh,不支持在一个命令中设置和导出变量。如果您使用的是这样的 shell,则需要使用两个命令来设置环境变量:

$ PAPARAZZI_HOME=/home/manish/paprazzi-git/paparazzi/
$ export PAPARAZZI_HOME

如果您使用的是 csh 或 tcsh,语法会有所不同。设置(非环境)shell 变量:

% set PAPARAZZI_HOME = /home/manish/paprazzi-git/paparazzi/

设置环境变量:

% setenv PAPARAZZI_HOME /home/manish/paprazzi-git/paparazzi/

在 csh 和 tcsh 中,shell 变量和环境变量的联系不像在 sh、ksh、bash、zsh 等中那样紧密;没有直接的方法(如 export 命令)将现有的 shell 变量更改为环境变量。您可以拥有同名的 shell 变量和环境变量,在这种情况下,$PAPARAZZI_HOME 将扩展为 shell 变量的值。如果您使用的是 bash,则可以放心地忽略这一段。

另一种可能性是您的程序以不继承您的 shell 环境的方式启动。如果您从 IDE 或其他一些 GUI 启动程序,它不会继承您在 shell 中设置的环境变量——除非您从该 shell 启动 IDE 或 GUI,并且之后设置环境变量。由于您使用的是 Ubuntu,请尝试通过在 shell 提示符下键入完整路径来启动您的应用程序。

哦,您可能不需要尾随 /

** 更新:**

经过长时间的聊天讨论,结果发现 OP 正在使用 sudo 调用他的程序,因为它需要 root 权限。

sudo,默认情况下,删除大多数环境变量。

您可以使用 sudo -E 要求它保护您的环境。 man sudo 获取详细信息。

尚不清楚 sudo -E 是否是最佳解决方案;它可能具有安全隐患。

如果程序只需要一个环境变量,那么:

$ sudo env PAPARAZZI_HOME=/home/manish/paprazzi-git/paparazzi/path/to/the/program

关于linux - qgetenv 返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18324846/

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