Linux环境变量详解

来源:互联网 发布:linux 挂载sd卡 编辑:程序博客网 时间:2024/05/22 04:27

Linux环境变量详解

环境变量的本质就是变量,它的服务对象是shell程序,它分为局部环境变量和全局环境变量,分别有不同的作用域和自然生命周期

1.不同角色的shell

不同的情况下,会产生不同的shell。既然环境变量是服务于shell程序的,那么就来分析一下不同角色的shell

  • 交互式shell:我们打开一个tty控制台,实际就打开了一个交互式shell。我们输入的bash命令就由交互式shell解析
  • 非交互式shell:就是各种脚本程序
  • 登录shell:登录系统后,首个执行的应用程序bash,该应用程序就称之为登录shell。登录shell执行后,才会由它陆续去执行其他的交互式shell,非交互式shell,可以认为它是所有shell的祖宗

2.全局环境变量

使用export导出的环境变量,就是全局环境变量

  • 全局环境变量的作用域为:创建该全局环境变量的shell及其子孙shell/进程。即子shell复制父shell的全套环境变量,子shell对得到的环境变量做修改并不会影响到父shell
  • 全局环境变量的自然生命周期为:创建该全局环境变量的shell死亡,并且其子孙shell/进程也全部死亡(通俗的来说,创建者的整个家族灭门了)

始祖环境变量

  • 登录系统后,首个执行的应用程序bash(登录shell)所创建的一堆全局环境变量,它们称为始祖环境变量。这一堆环境变量的生命周期是永久的

  • 启动shell会执行/etc/profile,导出一些通用全局环境变量,export PATH USER LOGNAME MAIL HOSTNAME等,所有用户的shell进程都可以访问到这些变量,我们可以在里面添加系统级别的环境变量。然后再依次执行~/.bash_profile、~/.bash_login、~/.profile或者~./bashrc,或者/etc/bashrc ,来初始化一些用户特有的环境变量,需要注意的是后面几个文件不一定都存在

常见需求:增加PATH

/etc/profile最后加上export PATH="/xxxx/xxx$PATH"

全局环境变量的一般使用方法

  • 例一,比如在控制台(交互式shell)中输入export AAA="123",那么今后在该控制台中,直接或间接执行的shell,都将继承该控制台(交互式shell)留下来的全局环境变量,包括加入的VAR="123"
  • 例二,有两个“非交互式shell”a.shb.sha.sh中执行了b.shb.sh中执行了export BBB="123"。现在执行a.sh,则b.sh是其子shell,所以 BBB这个环境变量对a.sh起不了作用。再一次印证了全局环境变量只能由创建者shell传给子孙shell

3.局部环境变量

不使用export导出的环境变量,就是局部环境变量。它通常作为某个脚本(非交互式shell)自己的私有变量

  • 局部环境变量的作用域为:仅仅创建者shell自己。其父shell、其子shell均无法访问

4.操作环境变量

  • 脚本和控制台中皆可设置环境变量,方法如下,尤其要注意bash的语法中“=”两边不能有空格,变量值中间也不能有空格,有的话要用单引号围起来
test=123    #局部环境变量一般用小写export TEST=123 #全局环境变量一般用大写export MYNAME='XIAO BA WU' #变量值有空格,要用单引号围起来export test #也可以这样把前面的局部变量导出到全局
  • 我们可以输入下列命令来查看当前控制台(交互式shell)的环境变量
printenv    #查看所有环境变量echo $HOME #查看指定环境变量
  • 我们可以这样取消当前控制台(交互式shell)环境变量
unset MYNAME
0 0
原创粉丝点击