我有一个 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/环境分别。
有关这些文件之间差异的更多信息,请参阅以下链接。
阅读以下文章也许会有所帮助调用BASH man 文件的部分,因为有很多环境因素会影响哪个脚本的运行和何时运行。