Linux上设置永久环境变量(Set Environment Variables permanently in Linux)
好久没有在Linux上设置环境变量了,印象中的bashrc还是profile文件都混淆了。
谷哥度娘上搜了搜,一大把。贴到这里,我也稍微整理整理思路。
根据牛人的解释,想要设置永久的环境变量,需要先考虑你目前用的是哪种shell:
- 登录/非登录 shell
- 登录shell:需要用户名、密码登录后才能进入的shell(或者通过”–login”选项生成的shell);退出时可用exit和logout命令。
- 非登录shell:不需要输入用户名和密码即可打开的Shell,例如:直接命令“bash”就是打开一个新的非登录shell,在Gnome或KDE中打开一个“终端”(terminal)窗口程序也是一个非登录shell。退出时只能用exit命令。
- 交互式/非交互式 shell
- 交互式Shell:在终端上执行,shell等待你的输入,并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、退出。当你退出后,shell也终止了。
- 非交互式Shell:以shell script(非交互)方式执行。在这种模式 下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾EOF,shell也就终止了。
可以通过打印“$-”变量的值(代表着当前shell的选项标志),查看其中的“i”选项(表示interactive shell)来区分交互式与非交互式shell。
echo $- (在终端直接输入) ---> himBH
./test.sh ("echo $-"在test.sh里) ---> hB
使用登录的shell (交互和非交互):
- 首先读取和执行/etc/profile全局配置文件。
- 然后依次查找~/.bash_profile、~/.bash_login 和 ~/.profile这三个配置文件,并读取查找到的第一个环境变量。(除非被“–noprofile”选项禁止了)
做了个实验:
打开一个登录的shell,创建了.bash_profile和.bash_login.
-bash-4.2$ cat .bash_profile export GRADLE_HOME=/home/nnn/gradle-1.12 export PATH=${GRADLE_HOME}/bin:${PATH} -bash-4.2$ cat .bash_login export GRADLE_HOME=/home/mmm/gradle-1.12 export PATH=${GRADLE_HOME}/binmmm:${PATH}
新打开一个shell,查看环境变量,以.bash_profile为准。
-bash-4.2$ echo $GRADLE_HOME /home/nnn/gradle-1.12 -bash-4.2$ echo $PATH /home/nnn/gradle-1.12/bin:/usr/lib64/qt-3.3/bin:/bin:/usr/bin
删掉.bash_profile,再重打开shell,查看环境变量,以.bash_login为准。
-bash-4.2$ echo $GRADLE_HOME /home/mmm/gradle-1.12 -bash-4.2$ echo $PATH /home/mmm/gradle-1.12/binmmm:/usr/lib64/qt-3.3/bin:/bin:/usr/bin
使用非登录交互shell
- 大部分读取 ~/.bashrc 文件
- 不同的发行版里面可能有所不同:如RHEL6.3中非登录shell仅执行了“~/.bashrc”文件,而KUbuntu10.04中却依次执行了/etc/bash.bashrc 和 ~/.bashrc 文件。
使用非登录非交互shell
- 只读取$BASH_ENV里特定的配置
另:当然shell也不仅限于bash,还有更多其他的shell可使用,如zsh,csh,ksh,csh等,可参考牛人的解答。
Bash:
vi ~/.profile export GRADLE_HOME=/home/user/gradle-1.12
csh or tcsh:
vi ~/.login
setenvGRADLE_HOME /home/user/gradle-1.12