为什么添加到 .profile 的环境变量不会显示在屏幕上

为什么添加到 .profile 的环境变量不会显示在屏幕上

我正在运行 Ubuntu 12.04

我补充道

export LD_LIBRARY_PATH=/home/dspies/workspace/hdf5-1.8.11-linux-shared/lib

到 .profile

但是当我登录并打开终端时,echo $LD_LIBRARY_PATH什么也没有。

当我切换到 ctrl-alt-F1 并登录时,echo $LD_LIBRARY_PATH 出现

/home/dspies/workspace/hdf5-1.8.11-linux-shared/lib

但是当我运行时screenecho $LD_LIBRARY_PATH屏幕内部又变为空

在什么情况下我可以期望 .profile 中的环境变量被设置?(有趣的是,似乎对 .profile 中 PATH 的任何修改总是会显示出来)

编辑:抱歉,我想我没有说清楚我真正想知道的是:我如何设置一个我想要在任何地方设置的环境变量(例如在屏幕上,在终端中,当我登录时,以及当我 ssh 进入时)?

答案1

答案是:

我应该将它们设置在 .pam_enviornment 中

看这里https://help.ubuntu.com/community/EnvironmentVariables

我想这是最常见的问题之一,我不知道为什么当我问这个问题时没有人给我正确的答案。

答案2

来自 Bash 手册:

当 bash 作为交互式登录 shell 或使用 --login 选项作为非交互式 shell 调用时,它首先从文件 /etc/profile 中读取并执行命令(如果该文件存在)。读取该文件后,它会按顺序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,然后从第一个存在且可读的文件中读取并执行命令。

这意味着如果你的主文件夹中有一个.bash_profile.bash_login,那么 bash 将不会读取你的 的内容.profile。此外,当不在交互式登录 shell 中运行时,.profile也不会读取 。

答案3

echo $0

当此命令在 shell 脚本中执行时,将返回正在执行的脚本名称。在终端中,它将返回正在使用的 shell 类型。

您正在使用bashshell。您需要添加此行

export LD_LIBRARY_PATH=/home/dspies/workspace/hdf5-1.8.11-linux-shared/lib

归档~/.bash_profile

编辑:

您可能会发现不同 shell 的登录配置文件脚本名称不同,这里

编辑2:

甚至我echo $0在两台不同的机器上执行时也得到了两个不同的响应。在一台机器上,我得到了bash,在另一台机器上,我得到了-bash。我问了这个问题这里。这就是我得到的答案。

Processes with a - at the beginning of arg 0 have been run via login, or by exec -l in bash.

读完这个答案后,我照做了help exec,答案如下If the first argument is '-l', then place a dash in the zeroth arg passed to FILE, as login does

相关内容