bash的四种登录方式及配置的环境变量

本文探讨了bash的四种启动方式:login non-login、interactive non-interactive,并详细解析了它们如何加载配置文件如/etc/profile、~/.profile、/etc/bashrc和~/.bashrc。内容涉及在不同登录状态下bash的行为,以及如何通过shopt login_shell检查登录状态。此外,还提到了交互式和非交互式shell的区别,以及如何通过$-和$PS1变量来判断bash的类型。

背景:搞docker用不同的指令, 通过三条指令分别去查看当前env,env不同,于是去研究bash的四种不同启动方式和文件读取 

docker run -it image env
docker run -it image bash , env
docker run -dt --name test image bash, docker run -it test bash, env

bash有四种登录方式:

login non-login interactive non-interactive

login & non-login:

login:在输入了账号密码的情况,或者打开bash使用参数bash -l / --login,login状态下,bash默认加载/etc/profile和~/.profile文件

不同内核的linux系统在读取文件上会稍有差异

nonlogin: 用户在登录状态下运行的其他shell,读取/etc/bashrc  ~/.bashrc

可以通过  shopt login_shell 命令查看当前是否login状态,on为login,off为非login

/etc/profie 文件配置了全局变量,对所有用户生效,会在用户登录时读取该文件

/etc/bashrc 每次加载bash时,会读取该文件 ~/.bashrc存放个人相关的设置

non-internative & interactive

interactive:需要通过键盘交互,自行exit,读取/ect/bashrc ~/.bashrc 

non-interactive:可能是自动化进程中运行的子shell,执行完指令直接自动退出为非交互式,自动运行因此最好将输出写入日志文件。非交互式shell通常是非登录的,因为调用的用户已经登陆了。一些shell会读取$ENV,不会读取bahsrc和profile

echo $-       如果输出的值包含i,说明当前的bash为交互式

echo $PS1 非空则为交互式,空值是交互式,因为非交互式会清空PS1 的值

        PS1 用来定义命令行提示符, 可以修改时间 颜色等

通过不同方式打开的bash,会加载读取不同的配置文件,ENV就会不同

不同组合的登录方式

docker run -it image env
# noninteractive + nonlogin 执行完env会自动退出
docker run -dt --name test image bash, docker run -it test env
# docker指令在bash中执行,所以是当前bash的子进程,也就是nonlogin
# 同时执行完env后自动退出,是non-interactive。不会去读取profile bashrc等配置文件
docker run -it image bash , env
# internative + nonlogin 打开bash 自行输入env 执行完成后如需退出需要自己exit

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值