我需要在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打印以下字符串:
“/家庭/马尼什/ paprazzi-混帐/狗仔队/”。
我正在使用
sudo "Path to Application Dir"/"Application Name".
答案:“sudo”删除了大部分用户的环境变量。因此,如果想要保留环境变量以及sudo,则必须使用sudo -E。有关详细信息,请参阅“man sudo”。
答案 0 :(得分:1)
具有
$ 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