环境变量在 Linux(Fedora)上不断变回其原始形式

环境变量在 Linux(Fedora)上不断变回其原始形式

我有一个 JAVA_HOME 变量,执行 >echo $JAVA_HOME会得到"old/path/to/my/jdk.1.7"。我进入终端并执行 ,export JAVA_HOME=new/path/to/my/jdk.1.8.0这在终端会话期间运行良好,但很快当我启动新选项卡/终端实例并执行 > 时,echo $JAVA_HOME它给了我:old/path/to/my/jdk.1.7。我可能做错了什么。

答案1

您必须将其包含export在您的~/.bashrc文件中~/.bash_profile,以便每次启动新会话时都会加载它。

答案2

在 shell 会话中设置的环境变量仅在该会话期间有效。要保留变量,您需要在每次使用脚本启动 shell 会话时设置它。有多个脚本文件可用于此目的,并且每次调用 bash 时都会自动执行这些脚本文件。不幸的是,这并不像看起来那么简单,因为 bash 可以以不同的方式调用,并且每种类型的调用都会执行不同的脚本。

为了交互式登录shell 调用(控制台、ssh 等),你可以通过添加以下行来设置变量的〜/ .bash_profile〜/ .bash_login或者〜/ .profile. Bash 会按顺序查找这些文件并执行第一个可读的文件。

为了交互式非登录shell 调用(子 shell、图形环境的终端等)使用~/.bashrc。请注意,一些发行版(Ubuntu)源~/.bashrc的〜/ .bash_profile因此在这里设置它也会将其设置为交互式登录。

export JAVA_HOME=new/path/to/my/jdk.1.8.0

非交互式shell 调用(调用来运行脚本的 shell)继承父环境,但不执行任何启动脚本。

此外,对于某些发行版(例如 Ubuntu),建议编辑的文件是~/.pam_environment,但语法略有不同,并且每行要求一个表达式。

JAVA_HOME DEFAULT=new/path/to/my/jdk.1.8.0

如果你希望更改是系统范围的而不是特定于用户的使用/etc/bash.bashrc/etc/配置文件/etc/环境分别。

有关这些文件之间差异的更多信息,请参阅以下链接。

https://stackoverflow.com/questions/415403/whats-the-difference-between-bashrc-bash-profile-and-environment

阅读以下文章也许会有所帮助调用BASH man 文件的部分,因为有很多环境因素会影响哪个脚本的运行和何时运行。

http://linux.die.net/man/1/bash

相关内容