0%

bash的环境配置

Bash的配置文件

  • /etc/profile
  • ~/.bash_profile
  • ~/.bash_login
  • ~/.profile
  • ~/.bash_logout
  • /etc/bash.bash_logout
  • /etc/bashrc
  • ~/.bashrc

~是用户的家目录。家目录是的配置文件只对该用户起作用。

要仔细理清楚这些配置文件的作用,和使用场景。需要了解交互式shell和非交互式shell,登录shell和非登录shell。

另:还有一个环境变量BASH_ENV.

在非交互式shell中,会是寻找这个环境变量,如果这个环境变量不为空,就按照值去找到这个文件,并加载进来。

1
2
3
if [ -n "$BASH_ENV" ]; then
. "$BASH_ENV"
fi

交互式shell和非交互式shell

交互式:很好理解,输入一个东西,返回一个结果;再输入一个东西,再返回一个结果。这样一来一回,就是交互式。

交互式shell:在shell终端上,就是交互式shell

非交互式shell:在shell脚本中,不需要一来一回,直接执行,就是非交互式shell。

登录shell和非登录shell

登录shell:就是要登录,要输入账号密码这样的信息。典型的:ssh登录;bash –login模式

非登录shell:就是不需要输入账号密码的情况。典型的:登录到本地linux后,打开的shell终端。

实际验证

简单配置一点信息,方便测试

1
2
3
4
5
6
echo "echo '/etc/profile'" >> /etc/profile
echo "echo '~/.bash_profile'" >> ~/.bash_profile
echo "echo '~/.bash_login'" >> ~/.bash_login
echo "echo '~/.bash_logout'" >> ~/.bash_logout
echo "echo '/etc/bashrc'" >> /etc/bashrc
echo "echo '~/.bashrc'" >> ~/.bashrc

ssh登录

1
2
3
4
5
6
7
$ ssh vm-101
Last login: Thu Apr 23 19:08:34 2020 from vm-1
/etc/profile
/etc/bashrc
~/.bashrc
~/.bash_profile
[root@vm-101 ~]#

终端登录

1
2
3
4
5
6
Last login: Thu Apr 23 19:11:04 2020 from vm-1
/etc/profile
/etc/bashrc
~/.bashrc
~/.bash_profile
[root@vm-101 ~]#

用bash命令启动一个终端

1
2
3
4
$ bash
~/.bashrc

bash-3.2$

用bash –login启动一个终端

1
2
3
4
5
6
 $ bash --login
/etc/bashrc
/etc/profile
~/.bash_profile

jasondeMacBook-Pro:shell jason$

直接打开一个新终端

1
2
3
4
5
6
Last login: Thu Apr 23 19:08:32 on ttys002
/etc/bashrc
/etc/profile
~/.bash_profile

jasondeMacBook-Pro:shell jason$

手动加载这些配置文件

用两个命令:source 和 .

对,没错。”.“,一个点这个符号也是一个命令。

1
2
3
4
5
6
$ which .
.: aliased to source # . 是 source
$ which source
source: shell built-in command # source是bash的内建命令。

$ source /etc/profile # 手动加载/etc/profile。其实就是执行了一遍/etc/profile。你甚至可以认为/etc/profile也是一个脚本。其他配置文件同理。

学习方法

不需要死记,但是要知道这些概念。能理解最好。

可能会遇到的问题:

  1. 你写的脚本,自己测试是好好的,但是给别人就有问题
  2. 脚本写好了,放在系统中定时运行,就出问题