Linux 环境变量
环境变量是个坑,不弄清楚的话经常会导致一些很麻烦的错误,被困扰了很久,环境变量使用中主要是在~/.bashrc里设置,其他地方的环境变量慎重设置。
Linux环境变量分类
一、按照生命周期来分,Linux环境变量可以分为两类:
1、永久的:需要用户修改相关的配置文件,变量永久生效。
2、临时的:用户利用export命令,在当前终端下声明环境变量,关闭Shell终端失效。
二、按照作用域来分,Linux环境变量可以分为:
1、系统环境变量:系统环境变量对该系统中所有用户都有效。
2、用户环境变量:顾名思义,这种类型的环境变量只对特定的用户有效。
Linux设置环境变量的方法
一、在/etc/profile
文件中添加变量 对所有用户生效(永久的)
用vim在文件/etc/profile
文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。
例如:编辑/etc/profile文件,添加CLASSPATH变量
vim /etc/profile
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
注:修改文件后要想马上生效还要运行source /etc/profile
不然只能在下次重进此用户时生效。
二、在用户目录下的.bash_profile文件中增加变量 【对单一用户生效(永久的)】
用vim ~/.bash_profile
文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。
vim ~/.bash.profile
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
注:修改文件后要想马上生效还要运行$ source ~/.bash_profile不然只能在下次重进此用户时生效。
三、直接运行export命令定义变量 【只对当前shell(BASH)有效(临时的)】
在shell的命令行下直接使用export 变量名=变量值
定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。
Linux环境变量使用
一、Linux中常见的环境变量有:
- PATH:指定命令的搜索路径
PATH声明用法:
PATH=$PAHT:<PATH 1>:<PATH 2>:<PATH 3>:--------:< PATH n >
export PATH
你可以自己加上指定的路径,中间用冒号隔开。环境变量更改后,在用户下次登陆时生效。
可以利用echo $PATH
查看当前当前系统PATH路径。
注意:上述变量的名字并不固定,如HOSTNAME在某些Linux系统中可能设置成HOST
二、Linux也提供了修改和查看环境变量的命令,下面通过几个实例来说明:
- echo 显示某个环境变量值 echo $PATH
- export 设置一个新的环境变量 export HELLO=“hello” (可以无引号)
- env 显示所有环境变量
- set 显示本地定义的shell变量
- unset 清除环境变量 unset HELLO
bashrc里设置环境变量导致的环境变量问题
知识点:
- 每次打开shell都会加载bashrc
- 修改bashrc注释环境变量或者修改后,source bashrc 后在该shell 里之前的环境变量仍然存在,新的环境变量路径和久的环境变量路径同时存在,开启新的shell后才能完全更改。
实例
export PYTHONPATH=/usr/lib/python2.7:$PYTHONPATH
export PYTHONPATH=/usr/local/lib/python2.7:$PYTHONPATH
#export PYTHONPATH=/usr/lib/python3.5:$PYTHONPATH
#export PYTHONPATH=/usr/local/lib/python3.5:$PYTHONPATH
source ~/.bashrc
echo $PYTHONPATH
/usr/local/lib/python2.7:/usr/lib/python2.7:
此时该shell下python路径为2.7,只能使用python2,不能使用python3
$python2
Python 2.7.12 (default, Nov 12 2018, 14:36:49)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
[1]+ Stopped python2
$python3
Fatal Python error: Py_Initialize: Unable to get the locale encoding
File "/usr/lib/python2.7/encodings/__init__.py", line 123
raise CodecRegistryError,\
^
SyntaxError: invalid syntax
Current thread 0x00007fc662b3c700 (most recent call first):
Aborted (core dumped)
注释掉PYTHONPATH后,在该shell下PYTHONPATH仍为2.7,开启新终端才没有PYTHONPATH变量,因为之前PYTHONPATH在终端打开时已经加载,修改bashrc 并且source后旧的环境变量仍然存在
在终端下不设置PYTHONPATH,在一个终端下便能同时使用python2和python3
只要设置了PYTHONPATH,变只能使用其中一个