Bash的类型(交互、登录)及其相关配置文件

最近在学习Bash方面的相关知识,了解了Bash的基本分类和其相关的配置文件。在参考网上一些资料的时候,发现网上的一些资料写得很乱而且也不够全面,同时对shell分类的定义也不够本质,甚至某些说法还有一些误导读者的倾向。索性自己根据Bash手册页中的相关内容总结一下。

Bash用法概览:

bash [option] file

Bash部分选项说明(只取和本篇相关的来说明):

-c string 如果使用-c选项,将从string处读取命令。如果string后面有参数(具体指令的参数arguments)的话,他们将被分配给由$0开始的位置参数(Bash的参数parameters)。

-i 如果使用-i选项,该shell就是交互的。

-l 使Bash被调用后的行为犹如登录shell(实际上不是真的存在哪个用户来登录,原文此处使用了完成时态的虚拟语气,编者注)。

--rcfile file 如果shell是交互的,则从file中执行命令而不是从标准的个人初始化文件~/.bashrc中执行。

--login 等同于-l

--noprofile 不会读取系统全局启动文件/etc/profile,也不会读取以下任何一个个人初始化文件~/.bash_profile,~/.bash_login或者~/.profile。默认情况下,当作为登录shell调用时Bash会读取这些文件。

--posix 将Bash默认不同于POSIX标准的行为进行修改,以匹配POSIX标准(posix模式)。

Bash的调用:

登录shell就是参数零的第一个字符是"-"号,或者以--login选项启动的shell。(注意在登录shell中显示该shell的特殊变量0,如echo $0,会看到这个变量的记录的字符以-开头,编者注释)

交互shell就是没有以非选项参数及-c选项、标准输入和错误都被连接终端(由isatty(3)决定),或者以-i选项来启动的shell。如果shell是交互的,PS1会被设定同时变量$-包含字符i,一次来实现使用脚本或者启动文件来测试这种状态。

接下来的段落描述了Bash是如何来执行它的启动文件的。如果以下文件中的任何一个存在但是不可以读取,Bash会报告一个错误。文件名中的波浪号用来进行扩展,具体参见扩展章节的波浪号扩展。(众所周知,"~"扩展以后其实就表示用户的家目录啦,编者注)

当Bash被当作交互式登录shell或者被当作带有--login选项的非交互式shell调用时,Bash首先读取并从文件/etc/profile中执行命令,如果该文件存在的话。读取该文件之后,Bash按照如下先后顺序搜索文件~/.bash_profile,~/.bash_login,~/.profile,然后读取第一个存在而且可读的文件并且执行其中的命令。可以在shell启动时使用--noprofile选项来禁止这种行为。

如果是以登录shell注销的,Bash会读取并执行文件~/.bash_logout和/etc/bash.bash_logout中的命令,假如文件存在的话。

当要启动非登录交互式shell时,Bash读取并从~/.bashrc中执行命令,如果该文件存在的话。可以使用选项--norc来禁止这中情况。选项--rcfile file会强制Bash从file处读取并执行命令,而不是从~/.bashrc中。

当Bash以非交互方式启动时,比如运行了一个shell脚本,Bash会在环境中查找变量BASH_ENV,如果BASH_ENV存在的话,Bash就会扩展其值,并且使用该变量的值作为要读取和执行的文件名。Bash的行为犹如下面的命令执行后的结果:

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

不过PATH变量中的值不会用来搜索该文件名。(如果要使用变量BASH_ENV来指定Bash的启动文件的话,注意要使用文件的全路径的额,编者注)

如果使用名称sh来调用的话,Bash会尽可能接近地尝试模拟sh历史版本的启动行为,同时也更贴合POSIX标准。当被当作交互式登录shell或者被当作带有--login选项的非交互式shell调用时,Bash首先试图读取并按照顺序从/etc/profile和~/.profile中执行命令。可以使用选项--noprofile禁止这种行为。当作为带有名称sh的交互shell调用时,Bash查找变量ENV,如果ENV已被定义就扩展其值,同时使用该扩展值作为读取和执行文件的名称。既然使用sh方式调用的shell不会读取任何其它启动文件并从中执行命令,那么,--rcfile就不会产生影响。使用sh名称调用的非交互shell也不会读取任何其它文件。当使用sh方式调用时,Bash会在读取启动文件之后进入posix模式。

当Bash进入posix模式时,比如使用了--posix命令行选项,bash对启动文件的处理遵循POSIX标准。在这个模式下,交互式shell扩展ENV变量,同时命令会从以变量扩展值作为名称的文件中读取并被执行。Bash不会再读取其它的启动文件。

当运行时,Bash尝试决定由远程shell守护,通常为rshd,或者安全shell守护进程sshd,链接到网络连接上的标准输入。如果Bash决定以这种方式运行,它会从~/.bashrc中读取并执行命令,假如该文件存在而且可读的话。如果以sh的方式调用的话,Bash就不会如此处理。选项--norc

时间: 2024-08-09 17:29:25

Bash的类型(交互、登录)及其相关配置文件的相关文章

用户和组命令及相关配置文件

用户和组命令及相关配置文件 目录 一.创建用户.组和权限相关命令 1.useradd 帐号建立 2.usermod 用户属性更改 3.Passwd 4.userdel 6.chfn. 7.Chsh 8.finger 9.groupadd 10.Groupdel 11.groupmod 12.gpasswd 13.Id 14.groups. 4 二.用户.组相关配置文件 1./etc/passwd 2./etc/shadow 3./etc/group. 5 3.1 /etc/group 内容具体分

linux基础--用户登录时读取配置文件顺序

linux下一切皆文件,在登录时也会跟随登录读取很多配置文件.在介绍读取顺序前先来了解一些信息. 用户登录的Shell类型 登录式Shell 正常通过某终端登录 su - USERNAME su -l USERNAME 非登录式Shell 以下方式的Shell su USERNAME 图形化终端打开的终端窗口 自动执行的Shell脚本 Bash的配置文件 全局配置文件 /etc/profice,/etc/profile.d/*.sh,/etc/bashrc 用户个人配置文件 ~/.bash_pr

Shell批量SSH免交互登录主机

脚本实现功能:批量或单个SSH免交互登录认证 脚本应用场景:当部署集群时,大多数实现要配置好管理节点与从节点的SSH免交互登录,针对这样的情况,写了下面脚本,简化工作. #!/bin/bash # blog:http://lizhenliang.blog.51cto.com   color_echo() {     if [ $1 == "green" ]; then         echo -e "\033[32;40m$2\033[0m"     elif [

Linux网络配置之二ip、ss、网络相关配置文件

本文续网络基础与Linux网络配置之一 ifconfig.route.netstat命令详解 ip命令 作用ip是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具,例如ifconfig.route等,使用权限为超级用户.几乎所有的Linux发行版本都支持该命令. 格式ip [ OPTIONS ] OBJECT { COMMAND | help }   OBJECT := { link | addr | route | netns  } 注:OBJECT可简写,

文档型信息交互设计及相关技术实现

本文信息交互是指办公和经营管理活动中所产生的公众或定向业务信息,以及在信息共享过程中,以业务规则形式衍生出的评论.评价.回复.转发等业务信息延续. 信息交互设计目标 共享业务信息,并支持限定范围 共享的业务信息,可以通过评论.评价.回复.转发等方式进行业务信息延续和推广 把发布信息.延续信息功能设计为通用功能 以信息实例为基本文档单元,衍生信息为其子文档,存储在文档型数据库中(MongoDB) 信息展现形式灵活多样,以模板形式为用提供应用选择 发布信息支持带格式文档,统一采用MarkDown编辑

Bigbluebutton服务执行过程及相关配置文件

BigBlueButton服务列表 BigBlueButton由许多开源的服务组成,看似很麻烦,实际上拆分开每一个服务就很简单了,组件化平台化.究竟BBB都用到了哪些开源服务?我们来列举一下,名称均带有对应官网链接.1.Ubuntu乌班图操作系统,友好的用户交互界面:2.Flex SDK,高效构建Web应用程序,基于所有浏览器的开源框架,AS3编写客户端软件的SDK:3.Ghostscript文档转换:4.Grails开源Web框架:5.ActiveMQ(官网有介绍,但未发现使用位置):6.Im

ip/ifcfg/ss/nmcli/等命令及相关配置文件编辑

Linux网络配置命令: Ifconfig命令: 查看和管理本机地址信息: ifconfig [interface]:显示本机所有处于活动状态的地址 -a :所有接口 eth0  :只显示eth0的信息 ifconfiginterface [aftype] options | address ... ifconfig the0  ip/mask [up|down]:启用接口 ifconfig eth0  172.16.100.11/16 或者: ifconfigeth0 172.168.100.

linux网络相关配置文件

linux网络相关配置文件 linux系统一般来说分为两大类:1.RedHat系列:Redhat.Centos.Fedora等:2.Debian系列:Debian.Ubuntu等. linux系统中,TCP/IP网络是通过若干个文本文件来进行配置的,需要配置这些文件来联网,下面对linux两大类系统中基本的TCP/IP网络配置文件做学习总结. 第一类Debian中Ubuntu系统为例 Ubuntu系统的网络配置文件有interfaces,resolv.conf等. 一.网络接口配置文件:/etc

基于Vue-Cli 打包自动生成/抽离相关配置文件

背景 基于Vue-cli 项目产品部署,涉及到的交互的地址等配置信息,每次都要重新打包才能生效,极大的降低了效率.我们的目的是让项目实施的小伙伴重新快乐起来.网上实现的方式,都是半自动化的,还需要重新修改. 需求点 配置化:打包后的配置文件可二次修改 配置自动生成:vue-cli 提供了各种环境的打包,要实现相关配置文件的自动打包 研发人员无痛感:对于产品研发人员来说,不需要增加额外的打包成本,基于Vue-cli的开发习惯不变. 实现步骤 一:配置自动生成 安装generate-asset-we