Centos 7 如何配置环境变量?在不同文件中配置有什么区别?

这里先介绍一个重要的概念:bash的运行模式。bash的运行模式分为login shell和non-login shell。

login shell和non-login shell两者有什么区别呢?
login shell:取得 bash 时需要完整的登陆流程的就称为 login shell。举例来说,我们通过 ctrl+alt+fn 登陆 tty1 ~ tty6 时,需要输入用户的账号与密码,此时取得的 bash 就称为“ login shell ”;
non-login shell:取得 bash 接口的方法不需要重复登陆的举动的就称为 non-login shell。举例来说,我们登陆 Linux 后, 右键启动的终端 Terminal或者在原本的 bash 环境下再次使用 bash 这个命令,建立的bash子进程,都称为 non-login shell。

为什么要介绍这两种bash的运行方式呢?
这是因为这两种shell启动时会加载不同的配置文件,login shell启动时会加载/etc/profile~/.bash_profile~/.bashrc。non-login shell启动时会加载~/.bashrc

而在加载~/.bashrc(实际是~/.bashrc中加载的/etc/bashrc)或/etc/profile时,都会执行如下代码片段,它会去执行/etc/profile.d目录下的所有.sh后缀的bash脚本。
在这里插入图片描述
login shell和non-login shell在启动时主要加载的配置文件如下图所示。
在这里插入图片描述
这里顺便提一下su和su -,su表示以non-login-shell的切换root用户;而su -则表示以login-shell切换root用户。大家感兴趣的可以分别以这两种方式切换用户并执行env指令查看一下环境变量,你会发现以su -方式切换的环境变量远远多于su方式。

所以,不管是login shell还是non-login shell,启动时都会加载/etc/profile.d/*.sh中的环境变量。所以我们一般会在/etc/profile.d中创建一个 my_env.sh 文件用于配置我们自己的环境变量。

在配置完环境变量后,我们可以选择重新启动一个 shell 以自动加载环境变量配置文件,也可以使用 soruce + my_env.sh 的方式加载环境变量配置文件。

为什么 soruce + my_env.sh 的方式能加载环境变量配置文件呢?
我们知道,bash脚本的执行方法分为三种:

  1. 输入bash/sh + 脚本的相对路径或绝对路径执行脚本
  2. 赋予脚本执行权限,直接输入脚本的绝对路径或相对路径执行脚本
  3. 在脚本的路径前加上 “.” 或者 source 的方式执行脚本

前两种都是在当前 shell 中打开一个子 shell 来执行脚本内容。而在脚本的路径前加上“.”或者 source的方式执行bash脚本,可以使脚本内容在当前 shell 里执行,而无需打开子 shell。开子 shell 与不开子 shell 的区别就在于环境变量的继承关系,例如在子 shell 中设置的变量,父 shell 是不可见的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰茶不冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值