Linux环境变量解疑

一、什么是环境变量

bash shell用一个称为环境变量的特性来存储有关shell会话和工作环境的信息。

环境变量有两类:全局变量局部变量
局部变量可以在这个shell进程和子进程中起作用,另创建一个shell,就无效了。

1.1 显示环境变量

  • 显示全局变量:printenv
  • 显示局部变量:set

1.2 设置环境变量

  • 设置局部变量:通过等号来给环境变量赋值,如

$test=testing
$echo $test
testing
$

  • 设置全局变量:通过将局部变量导出为全局变量的方式,如

$echo $test
testing a long string
$export test
$bash
$echo $test
testing a long string
$

1.3 删除环境变量

  • 局部变量:unset test
  • 全局变量:unset test 需要注意的是:如果你是在子进程中删除一个全局环境变量,它只对子进程失效。全局环境变量在父进程仍然有效。

二、系统环境变量

linux启动启动一个bash shell时,默认情况下bash在几个文件中查找命令。这些文件称为启动文件,根据bash shell启动方式的不同,查找文件不同

bash shell有三种方式:

2.1 登陆时当做默认登陆shell

会依次查找一下路径:

  • /etc/profile
  • $HOME/.bash_profile
  • $HOME/.bash_login
  • $HOME/.profile

/etc/profile文件是系统上默认的bash shell的主启动文件。每个用户登陆都会执行这个启动文件,另外3个启动文件是用户专有的,可根据用户定制。

2.2 作为非登陆shell的交互式shell

如果你的bash shell不是登陆系统时启动的,称为交互式shell。

交互式shell不会去访问/etc/profile文件,而会去用户的HOME目录检查.bashrc是否存在。

.bashrc文件的作用
有两个作用:

  • 一是查看/etc目录下的公用bashrc文件
  • 二是为用户提供一个定制自己的命令别名和私有脚本函数的地方。
    (默认的文件会设置一些环境变量,但一般它没有执行export命令让它们称为全局的。)

记住,交互式shell的启动文件只会在每次有新的交互式shell启动时才运行,因此任何子shell都会自动执行这个交互式shell的启动文件。

还能看出,/etc/bashrc文件也会执行位于/etc/profile.d 目录下的那些应用专属的启动文件。

2.3 作为运行脚本的非交互shell

系统执行shell脚本时用的就是这种shell。

当你每次在系统上运行脚本时需要运行特定的启动命令。为了处理这种情况,bash shell提供了BASH_ENV环境变量。

当shell启动一个非交互式shell进程时,它会检查这个环境变量来查看要执行的启动文件。如果有指定,shell会执行文件里的命令。
(在linux发行版里,默认情况下这个环境变量并未设置。)


参考:

(转载本站文章请注明作者和出处 Vernon Zheng(郑雪峰) – vernonzheng.com ,请勿用于任何商业用途)

Hello World

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in trobuleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment