有
$ 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,如原始 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,则可以放心地忽略这一段。
另一种可能性是您的程序正在以不继承您的外壳环境的方式启动。如果您从 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