Shell的四种启动方式和配置文件编写

目录

一、Shell的四种启动方式

1、判断 Shell 是否是交互式

2、判断 Shell 是否为登录式

3、同时判断交互式、登录式

二、Shell配置文件(配置脚本)的加载

1、登录式的 Shell

2、非登录的 Shell

三、编写自己的Shell配置文件


一、Shell的四种启动方式

Shell 一共有四种运行方式:交互式的登录 Shell、交互式的非登录 Shell、非交互式的登录 Shell、

非交互式的非登录 Shell。

1、判断 Shell 是否是交互式

判断是否为交互式 Shell 有两种简单的方法。

1) 查看变量-的值,如果值中包含了字母i,则表示交互式(interactive)。

【实例1】在终端下输出-的值:

[root123@localhost addon]$ echo $-
himBH   # 包含了i,为交互式。

【实例2】在 Shell 脚本文件中输出-的值:

[root123@localhost addon]$ cat test.sh    
#!/bin/bash
echo $-
[root123@localhost addon]$ bash test.sh 
hB        # 非交互式

不包含i,为非交互式。注意,必须在新进程中运行 Shell 脚本

2) 查看变量PS1的值,如果非空,则为交互式,否则为非交互式,因为非交互式会清空该变量。

【实例1】在自带的终端下输出 PS1 的值:

[root123@localhost addon]$ echo $PS1
[\u@\h \W]\$   # 非空,为交互式。

2、判断 Shell 是否为登录式

判断 Shell 是否为登录式也非常简单,只需执行shopt login_shell即可,值为on表示为登录式,off为非登录式。

[root123@localhost addon]$ shopt login_shell
login_shell     on

3、同时判断交互式、登录式

要同时判断是否为交互式和登录式,可以简单使用如下的命令:

[root123@localhost addon]$ echo $PS1; shopt login_shell
[\u@\h \W]\$
login_shell     on

或者

echo $-; shopt login_shell

二、Shell配置文件(配置脚本)的加载

无论是否是交互式,是否是登录式,Bash Shell 在启动时总要配置其运行环境,例如初始化环境变量、设置命令提示符、指定系统命令路径等。这个过程是通过加载一系列配置文件完成的,这些配置文件其实就是 Shell 脚本文件。

与 Bash Shell 有关的配置文件主要有 /etc/profile、~/.bash_profile、~/.bash_login、~/.profile、~/.bashrc、/etc/bashrc、/etc/profile.d/*.sh,不同的启动方式会加载不同的配置文件。

1、登录式的 Shell

Bash 官方文档说:如果是登录式的 Shell,首先会读取和执行 /etc/profiles,这是所有用户的全局配置文件,接着会到用户主目录中寻找 ~/.bash_profile~/.bash_login 或者 ~/.profile,它们都是用户个人的配置文件

不同的 Linux 发行版附带的个人配置文件也不同,有的可能只有其中一个,有的可能三者都有,笔者使用的是 CentOS 7,该发行版只有 ~/.bash_profile,其它两个都没有。

如果三个文件同时存在的话,到底应该加载哪一个呢?它们的优先级顺序是 ~/.bash_profile > ~/.bash_login > ~/.profile

如果 ~/.bash_profile 存在,那么一切以该文件为准,并且到此结束,不再加载其它的配置文件。

如果 ~/.bash_profile 不存在,那么尝试加载 ~/.bash_login。~/.bash_login 存在的话就到此结束,不存在的话就加载 ~/.profile。

注意,/etc/profiles 文件还会嵌套加载 /etc/profile.d/*.sh,请看下面的代码:

for i in /etc/profile.d/*.sh ; do
    if [ -r "$i" ]; then
        if [ "${-#*i}" != "$-" ]; then
            . "$i"
        else
            . "$i" >/dev/null
        fi
    fi
done

同样,~/.bash_profile 也使用类似的方式加载 ~/.bashrc

if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

2、非登录的 Shell

如果以非登录的方式启动 Shell,那么就不会读取以上所说的配置文件,而是直接读取 ~/.bashrc

~/.bashrc 文件还会嵌套加载 /etc/bashrc,请看下面的代码:

if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi

三、编写自己的Shell配置文件

对于普通用户来说,也许 ~/.bashrc 才是最重要的文件,因为不管是否登录都会加载该文件

我们可以将自己的一些代码添加到 ~/.bashrc,这样每次启动 Shell 都可以个性化地配置。

当用户登录 Shell 时,PATH 变量会在 /etc/profile 文件中设置,然后在 ~/.bash_profile 也会增加几个目录。如果没有登录 Shell,PATH 变量会在 /etc/bashrc 文件中设置。

如果我们想增加自己的路径,可以将该路径放在 ~/.bashrc 文件中,例如:

export PATH="$PATH:$HOME/addon"   

将主目录下的 addon 目录也设置为系统路径。假如此时在 addon 目录下有一个 getsum 程序,它的作用是计算从 m 累加到 n 的和,那么我们不用 cd 到 addon 目录,直接输入 getsum 命令就能得到结果。

source  ~/.bashrc

注意,使用 source 命令,使修改的配置立刻生效

操作过程:

[root123@localhost addon]$ cat ~/.bashrc
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions

export PATH="$PATH:$HOME/addon"
 
[root123@localhost addon]$ source  ~/.bashrc
[root123@localhost addon]$ getsum -s 1 -e 100
5050

参考:

Linux环境变量配置的三个方法--/etc/profile,~/.bashrc,shell_弹指天下-CSDN博客_bashrc添加环境变量【环境配置的原因】在windows系统下,很多软件的安装都需要设置环境变量,比如安装JAVA JDK。如果不安装环境变量,在非软件安装的目录下运行javac命令,将会报告“找不到文件”类似的错误。那么,什么是环境变量呢?简要的说,就是指定一个目录,运行软件的时候,相关的程序将会按照该目录寻找相关文件。设置变量对于一般人最实用的功能就是:不用拷贝某些dll文件到系统目录中了,而path这一系统变https://blog.csdn.net/w1014074794/article/details/50952432

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

swadian2008

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

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

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

打赏作者

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

抵扣说明:

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

余额充值