在开始介绍正文之前,先来了解下什么是linux的环境变量?
环境变量
(environment variables)一般是指在操作系统中用来指定操作系统运行环境
的一些参数,这些参数会对系统行为产生影响。
比如常用的PATH环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还会到PATH中指定的路径去找。你可以在终端使用printenv PATH/echo $PATH
查看当前PATH变量的值。
Linux系统下修改/自定义环境变量的方法通常分为两类:临时修改和永久性修改
。下面分别介绍两种修改环境变量的方法。在这里以修改linux系统下的PATH环境变量(该环境变量保存了linux系统下所有可执行的程序的目录,linux系统执行某个可执行程序时,会以该环境变量的值(路径)去寻找可执行的程序名)为例进行举例。PATH环境变量
:该环境变量保存了linux系统下所有可执行的程序的目录,linux系统执行某个可执行程序时,会以该环境变量的值(路径)去寻找可执行的程序名,如果找到,则可以执行,如果找不到则会提示:无法找到××命令的错误。
1、临时修改/自定义环境变量
(1)临时自定义环境变量。
注意,系统默认的环境变量名称一般为大写,自定义的环境变量名称一般为小写,这样是为了避免命名上的冲突。
自定义临时环境变量时,有两种办法,一种是在terminal终端命令行直接定义,如下:
注意,此时自定义的my环境变量的作用范围仅限于当前shell(此时定义的my变量实际上是局部变量
),在当前shell的子shell中无法寻找到该自定义变量。直接在其子shell中无法直接使用它。要想在其子shell中使用,必须用export命令来导出它为全局变量。
如上图所示,在定义my环境变量的子shell中无法识别到my环境变量。
当定义完my环境变量后,利用export命令将其转化为全局变量:
可以看到,使用export将my环境变量导出成全局变量后,在其子shell中也可以识别到。
**注意!!!!**使用export导出的my环境变量仅仅适用于当前的shell及其衍生shell中,退出当前shell后,my变量将不复存在
。所以,这也是该方法被称为临时定义变量的原因。
自定义临时环境变量时,除了在terminal终端命令行直接定义外,还可以使用shell脚本的方法来事先定义好一个环境变量。并用source命令(或者 .
命令)(这么做是因为使用这两个命令是在当前shell中激活该脚本,不会产生子shell)在使用该变量的shell中激活该shell脚本即可。
例如,事先在test.sh脚本中定义好my环境变量,并导出为全局变量。在当前shell中激活test.sh脚本。
在要用到my自定义变量的shell中激活test.sh文件:
实际上,第二中方法是第一种方法的shell脚本表达。
(2)临时修改环境变量。
这里修改的是PATH环境变量,为该变量添加一个可执行的shell脚本的路径:/home/mc146/shell_p/for_test.sh
。自己操作时换成自己的目录即可。for_test.sh脚本的内容如下:
在命令行修改PATH环境变量,修改方法:PATH=$PATH:待添加的可执行程序目录.
同自定义环境的转为全局环境变量一样,该修改操作仅限于当前shell及其衍生的子孙shell中。一旦退出当前shell(最顶层shell),PATH环境变量仍会维持原值不变。
下面使用shell脚本的方法来临时修改PATH环境变量,方法与使用shell脚本的方法来自定义全局变量相同。下面是修改PATH环境变量的脚本。名字为test.sh。位于/home/mc146/Desktop/test.sh。
在要执行for_test.sh这一脚本的shell中激活修改PATH环境变量的脚本即可:注意,在这里是使用.
命令(source命令的别名)来激活test.sh文件。
同在命令行中修改PATH环境变量一样,该修改操作仅限于当前shell及其衍生的子孙shell中。一旦退出当前shell(最顶层shell),PATH环境变量仍会维持原值不变。
2、永久性修改/自定义环境变量。
Ubuntu系统包含两类环境变量:系统环境变量和用户环境变量。系统环境变量对所有系统用户都有效,用户环境变量仅仅对当前的用户有效。首先明确一点,永久性添加/修改的环境变量对所有的shell都有效,都是全局变量。想要永久性修改或定义环境变量,有以下两大类方法进行修改/添加环境变量:
(1)系统级修改/添加—对所有的用户都添加/修改。
系统级的环境变量的永久性
修改以及添加可以通过一下几个文件或者目录进行操作即可:
/etc/profile
/etc/profile.d(它是文件夹),可通过在该目录下面新建一个shell脚本来添加自定义环境变量。
/etc/bash.bashrc
/etc/profile和/etc/profile.d都是常用的设置环境的地方。
其中/etc/profile.d文件夹来源于/etc/profile
,在该目录下的*.sh,即以sh为后缀的文件在登录系统时
都会被加载作用到整个shell环境中。因此,可以通过在/etc/profile.d目录下定义一个用来修改或添加新环境变量的shell脚本
(类似于上文中的test脚本)来修改或添加自定义(永久性)环境变量。
类似地,不推荐使用/etc/bash.bashrc,因为在图形界面环境下启动程序时,不会加载它里边的环境变量设置。
在这里,本文将要添加的/修改的环境变量操作放到:**/etc/profile文件
**中。
本文中仍以添加my自定义变量和修改PATH环境变量(添加for_test.sh这一shell脚本的路径)为例。具体如下:
注意,要想使该操作完全生效,必须重启系统。如果单单是在某个shell中source 该文件的话,则该操作会退化为临时添加或者修改环境变量。
**重启后验证以下两个变量是否添加成功,结果有点意外,修改环境变量成功了,但是添加西自定义变量失败。。。。。:**如下图所示:
不知道什么原因,自定义的my环境变量并没有通过/etc/profile文件添加成功
。(本文所使用的系统为ubunt18.04LTS,不知道是不是系统的原因,各位大佬有类似成功的还望在评论区交流哈。在此谢过了。)
(2)用户级修改/添加—仅对当前用户添加/修改环境变量。
用户环境变量可存储在以下文件中:
~/.profile
~/.bashrc
~/.bash_profile
~/.bash_login
推荐将环境变量保存在~/.profile中,因为无论是通过控制台还是图形界面启动程序时,都会自动执行该文件。 而~/.bashrc, ~/.bash_profile,~/.bash_login这些文件,当通过shell启动程序时,它们也会被加载;但当通过图形界面环境启动程序时,这些文件中的环境变量设置便不可用了。
在这里,本文将要添加的/修改的环境变量操作放到:~/.bashrc文件中。
本文中仍以添加my自定义变量和修改PATH环境变量(添加for_test.sh这一shell脚本的路径)为例。具体如下:
重启系统后,验证一下添加的my 自定义环境变量和修改的PATH环境变量的效果。
可以看到,对my自定义环境变量以及PATH环境变量的修改都成功了。
写在最后,本文在书写过程中,参考了一下两位大佬的博客,在此贴出来,以示尊敬: