`

shell相关-------各环境变量配置文件及对应的shell模式

阅读更多

■各配置文件

1./etc/profile

系统中每个用户登录时都要执行这个脚本,如果系统管理员希望某个设置对所有用户都生效,可以写在这个文件里

 

2.~/.bash_profile、~/.bash_login和~/.profile

这些是在当前用户主目录下定义的,其实主要是~/.bash_profile,其他两个一般好像不存在。

[root@localhost sabopeusr0]# ls -a ~
.  ..  .bash_history  .bash_logout  .bash_profile  .bashrc  .cshrc  .tcshrc  anaconda-ks.cfg

 

~/.bash_profile,如果希望某个设置只对当前用户生效,可以写在这个文件里。

由于这个脚本在/etc/profile之后执行,/etc/profile设置的一些环境变量的值在这个脚本中可以修改,
也就是说,当前用户的设置可以覆盖(Override)系统中全局的设置。

~/.profile这个启动脚本是sh规定的,bash规定首先查找以~/.bash_开头的启动文件,

如果没有则执行~/.profile,是为了和sh保持一致。

 

3.~/.bash_logout

在退出登录时会执行~/.bash_logout脚本(如果它存在的话)。

 

4.~/.bashrc

在图形界面下开一个终端窗口,或者在登录Shell提示符下再输入bash命令,就得到一个交互非登录的Shell。
这种Shell在启动时自动执行~/.bashrc文件并以fork子shell的方式执行,即继承父shell的环境变量,并依据.bashrc来修改,
执行完后本地变量不会保存到父shell中去。

[root@localhost sabopeusr0]# ps -ef|grep -v grep|grep bash
sabopeu+  8906  8905  0  7月26 pts/2  00:00:00 -bash
root     11223 11222  0 09:41 pts/2    00:00:00 bash
[root@localhost sabopeusr0]# bash
[root@localhost sabopeusr0]# ps -ef|grep -v grep|grep bash
sabopeu+  8906  8905  0  7月26 pts/2  00:00:00 -bash
root     11223 11222  0 09:41 pts/2    00:00:00 bash
root     11392 11223  0 13:00 pts/2    00:00:00 bash
[root@localhost sabopeusr0]#

 

有时为了使登录Shell也能自动执行~/.bashrc,通常在~/.bash_profile中调用~/.bashrc:
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
上面的意思是,如果~/.bashrc文件存在则source它。多数Linux发行版在创建帐户时会自动创建~/.bash_profile和~/.bashrc脚本,
~/.bash_profile中通常都有上面这几行。所以,如果要在启动脚本中做某些设置,使它在图形终端窗口和字符终端的Shell中都起作用,
最好就是在~/.bashrc中设置。

 

 

■Shell模式

1.交互式登录shell启动

/etc/profile,~/.bash_profile,~/.bash_login和~/.profile

 

1)以Bash的方式启动登录shell(/etc/passwd里定义的shell是/bin/bash,默认就是这种方式)

/etc/profile⇒~/.bash_profile⇒~/.profile

(~/.profile这个启动脚本是sh规定的,bash规定首先查找以~/.bash_开头的启动文件,如果没有则执行~/.profile,是为了和sh保持一致。)

 

2)以sh的方式启动登录shell(/etc/passwd里定义的shell是/bin/sh,默认就是这种方式)

如果以sh命令启动bashbash将模拟sh的行为,以~/.bash_开头的那些启动文件就不认了。

所以,如果作为交互登录Shell启动,或者使用--login参数启动,则依次执行以下文件:

/etc/profile⇒~/.profile

 

2.交互式非登录shell启动 

~/.bashrc

 

为什么登录Shell和非登录Shell的启动脚本要区分开呢?

最初的设计是这样考虑的,如果从字符终端或者远程登录,那么登录Shell是该用户的所有其它进程的父进程,也是其它子Shell的父进程,

所以环境变量在登录Shell的启动脚本里设置一次就可以自动带到其它非登录Shell里,

而Shell的本地变量、函数、alias等设置没有办法带到子Shell里,需要每次启动非登录Shell时设置一遍,

所以就需要有非登录Shell的启动脚本,所以一般来说在~/.bash_profile里设置环境变量,在~/.bashrc里设置本地变量、函数、alias等。

如果你的Linux带有图形系统则不能这样设置,由于从图形界面的窗口管理器登录并不会产生登录Shell,所以环境变量也应该在~/.bashrc里设置。

 

 3.非交互式启动

为执行脚本而fork出来的子Shell是非交互Shell,启动时执行的脚本文件由环境变量BASH_ENV定义,相当于自动执行以下命令:
    if [ -n "$BASH_ENV" ]; then
     . "$BASH_ENV";
     fi
如果环境变量BASH_ENV的值不是空字符串,则把它的值当作启动文件的文件名,source这个脚本。

 

通过sh,来fork非交互式shell,则

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

 

一般来说,如果作为非交互Shell启动,则不执行任何启动脚本。通常我们写的Shell脚本都以#! /bin/sh开头,都属于这种方式。 

 

简单测试

 

[sabopeusr0-admin@localhost ~]$ grep tshell .bashrc
tshell="non-login shell will see this message"
export tshell
[sabopeusr0-admin@localhost ~]$ grep lshell .bash_profile
lshell="login shell will see this message"
export lshell
[sabopeusr0-admin@localhost ~]$ bash
[sabopeusr0-admin@localhost ~]$ echo $lshell

[sabopeusr0-admin@localhost ~]$ echo $tshell
non-login shell will see this message
[sabopeusr0-admin@localhost ~]$ exit
exit
[sabopeusr0-admin@localhost ~]$ bash --login
[sabopeusr0-admin@localhost ~]$ echo $lshell
login shell will see this message
[sabopeusr0-admin@localhost ~]$ echo $tshell
non-login shell will see this message
[sabopeusr0-admin@localhost ~]$

 

 

分享到:
评论

相关推荐

    adb shell可以按tab补全工具 命令行补全工具

    把adb.rar解压到c盘根目录下,确保解压的2个文件在C:\adb目录下。 ...这时候重新打开命令行 进去点击adb shell进入Android 里面的输入首字母 按tab键 就可以补全对应字符了

    maven-mvnd提供更快的Maven构建

    配置mvnd可执行文件到系统的环境变量中; 配置后,打开命令行,执行mvnd -version; 构建 mvnd clean package -DskipTests install; idea中使用无效,使用管理员启动idea 就可以了; idea中terminal的shell path ...

    新版Android开发教程.rar

    � 良好的盈利模式( 3/7 开),产业链条的各方:运营商、制造商、独立软件生产商都可以获得不错的利 益 。 将移动终端的评价标准从硬件向软件转变,极大的激发了软件开发者的热情。 � Android 的源代码遵循 Apache...

    ubuntu16.04搭建伪分布式文档

    * `libexec`:各个服务对应的 shell 配置文件所在的目录。 * `sbin`:存放 Hadoop 管理脚本。 * `share`:hadoop 各个模块编译后的 jar 包所在目录。 * `src`:hadoop 的源码包。 MapReduce 示例 1. 创建输入文件...

    cmd操作命令和linux命令大全收集

    get server.exec:server.exe 登陆后,将“IP”的server.exe下载到目标主机c:server.exe 参数:-i指以二进制模式传送,如传送exe文件时用,如不加-i 则以ASCII模式(传送文本文件模式)进行传送 tftp -i 对方IP put...

    第8章 HBase组件安装配置.pdf

    HBase 组件安装配置知识点总结 本章节主要讲述 HBase 组件的安装和配置过程。... * 环境变量配置错误 * HBase 服务无法启动 本章节详细讲述了 HBase 组件的安装和配置过程,并总结了相关的知识点。

    rar压缩软件.rar

    RAR 是一个让你在命令行模式中管理压缩文件的控制台应用。RAR 提供压缩、加 密、数据恢复和许多其它此手册中描述的其它功能。 RAR 只支持 RAR 格式压缩文件,它默认有 .rar 扩展名。不支持ZIP 和其他格 式。即使...

    入门学习Linux常用必会60个命令实例详解doc/txt

    在前两种格式中,会将<来源>复制至<目的地>或将多个<来源>文件复制至已存在的<目录>,同时设定权限模式及所有者/所属组。在第三种格式中,会创建所有指定的目录及它们的主目录。长选项必须用的参数在使用短选项时也...

    易语言程序免安装版下载

    修改集成开发环境,自动记忆非独立编译时是否写出依赖文件的选项。 6. 大幅提高编译速度。 对其它支持库的更新: 1. 修改高级表格支持库,在双击单元格进入编辑状态后,不能收到第一个“字符输入”事件的BUG。 ...

    (重要)AIX command 使用总结.txt

    #如何取定文件与文件集的对应关系,有时想使用某个安装文件, 但没有安装包含该文件的文件集,找到文件集来安装所需文件 首先确认系统中已经安装了“bos.content_list”文件集(fileset), 如果没有安装, 请使用smitty ...

    SOLARIS高级系统管理员指南

    4.4.5 文件模式 40 4.5 配置文件 41 4.5.1 sendmail配置文件部分 41 4.5.2 sendmail配置文件例子 42 4.5.3 配置文件文法 49 4.5.4 特别的标题行 51 4.5.5 地址重写规则 52 4.5.6 构造新的配置文件 58 4.6 命令行参数...

    Hi3518_SDK中文资料

    3) 执行source /etc/profile, 安装交叉编译器的脚本配置的环境变量就可以生效了,或者请重新登陆也可。 5、编译osdrv 参见osdrv目录下readme 6、SDK目录介绍 Hi3518_SDK_Vx.x.x.x 目录结构如下: |-- sdk....

    linux常见问题1

    如果您的 shell 类型不是 bash,而是 zsh 或其他类型,那么您需要将环境变量添加到对应的配置文件中,例如 `~/.zshrc`。 删除环境变量 如果我们想删除一个环境变量,可以使用 `unset` 命令: `unset 变量名` ...

    Linux指令一周通 (技术图书大系).azw3

    6.41 setenv指令:查询或显示环境变量 6.42 setup指令:设置公用程序 6.43 sndconfig指令:设置声卡 6.44 timeconfig指令:设置时区 6.45 ulimit指令:控制shell程序的资源 6.46 unalias指令:删除别名 6.47 unset...

    Linux常用命令、日常开发常用

    定义全局环境变量; 查看日志并查找关键字; 设置防火墙开机自启; 防火墙开放或移除端口; 解压缩文件为压缩包; 从Linux中上传或下载文件到本地(lrzsz); shell编辑命令快捷键; 配置命令开机自动执行脚本; ...

    精通Windows.API-函数、接口、编程实例.pdf

    3.1.5 编译链接工具依赖的环境变量 39 3.1.6 示例:使用/D选项进行条件编译 42 3.2 使用Platform SDK 43 3.2.1 Platform SDK的目录结构与功能 43 3.2.2 为编译链接工具设置环境变量 45 3.2.3 Platform ...

    Linux与Python 编程R 复习大纲 (软件20级).doc

    1.6 常见的 Linux 文件类型及其对应的描述字符 * 普通文件(-) * 目录文件(d) * 链接文件(l) * 块设备文件(b) * 字符设备文件(c) 1.7 Linux 的文件目录结构 * 根目录(/) * 家目录(~/) * 临时文件...

    如何通过shell脚本自动生成vue文件详解

    Windows下需要安装Cygwin类软件且配置环境变量后运行 使用方法 1、需要修改package.json 的scrpts 加一条create 或者自定义名字 主要是为了我们在terminal中输入指令后运行对应的脚本 package.json 2、在项目根...

    MiaoYuYueSheng-Applet-Backend:妙语悦声小程序后端

    # 自动从项目目录下的.env文件中加载环境变量 pipenv shell # 虚拟环境中运行命令 pipenv run command 下载依赖包 pipenv install -r requirements.txt 进入util/const.py文件,修改对应的数据库IP地址和端口 进入...

Global site tag (gtag.js) - Google Analytics