博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bash学习:登陆、非登陆shell,交互、非交互shell,以及它们的startup文件
阅读量:5130 次
发布时间:2019-06-13

本文共 1570 字,大约阅读时间需要 5 分钟。

来源:

感谢原作者

家目录下的配置文件.bashrc中rc的含义是resource configuration

什么是登陆shell?什么是非登陆shell?

登陆shell是指:(1)用户登陆时,输入用户名和密码后启动的shell;(2)通过带--login参数的命令:bash --login而启动的shell对于用户来说,登陆shell和非登陆shell的主要区别是:启动shell时所执行的startup文件不同我在/etc/profile、~/.bash_profile、~/.bashrc三个文件中分别通过echo命令打印出文件名执行命令如下所示:

wangjk@wangjiankun:~$ bash 

.bashrc 
wangjk@wangjiankun:~$ bash --login 
etc/profile 
.bash_profile 
.bashrc 

上面的结果说明:登陆shell执行startup文件为:/etc/profile~/.bash_profile~/.bashrc(这里只是从现象上得出的推论,这种推论是有问题的,稍后讨论),而非登陆shell执行的startup文件仅为:~/.bashrc

bash作为登陆shell是由/etc/login程序解析/etc/passwd文件而指定的,例如:wangjk:x:1000:1000:wangjiankun,,,:/home/wangjk:/bin/bash,其中红色域指定了用户的登录shell是bash

事实上,bash作为登陆shell启动时执行的startup文件如下:

  • /etc/profile
  • ~/.bash_profile,~/.bash_login or ~/.profile, first existing readable file is read

而bash作为非登陆shell启动时读取~/.bashrc注意,作为登陆shell时bash并不读取~/.bashrc,但是在文件~/.bash_profile中通常都有如下语句来读取~/.bashrc:

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

以上讨论的是交互式bash shell,其实shell有两种工作模式,就是:交互式和非交互式,执行脚本时,shell就工作在非交互式模式下在非交互模式下,bash读取的startup文件由环境变量BASH_ENV来决定,例如,我在~/.test文件中用echo命令打印语句:I test non-interactive shell,在test.sh脚本中打印语句:this file is test.sh,运行输出结果如下:

wangjk@wangjiankun:~$ 

wangjk@wangjiankun:~$ echo $BASH_ENV

wangjk@wangjiankun:~$ ./test.sh                                             

this file is test.sh 
wangjk@wangjiankun:~$ export BASH_ENV=~/.test 
wangjk@wangjiankun:~$ ./test.sh                                             
I test non-interactive shell 
this file is test.sh 

注意,中间的那个空行表示环境变量BASH_ENV为空,所以第一次运行脚本test.sh时只输出了一句话,在定义了环境变量BASH_ENV为~/.test以后运行脚本test.sh就打印了两句话其中第一句是运行文件~/.test打印出来的

 
 
 
 
 

转载于:https://www.cnblogs.com/elefish/archive/2013/01/29/2880792.html

你可能感兴趣的文章
007grafana监控时间戳转换
查看>>
【2003-4】【分数计算】
查看>>
【2011-5】【最大乘积】
查看>>
一般计算 【2007】三3 C++版
查看>>
git使用总结
查看>>
2016-12-26 spoj STARSBC 欧拉函数水 spoj KAOS 字典树
查看>>
GoLang安装
查看>>
Spring 4 官方文档学习(十一)Web MVC 框架之HTTP caching support
查看>>
蓝桥杯历届试题 错误票据
查看>>
Objective-C 继承与多态
查看>>
图像预处理第6步:分割,并在分割出来的字符外面画框以标识
查看>>
NTP时间服务
查看>>
2016.04.11,英语,《Vocabulary Builder》Unit 12
查看>>
Web项目去掉Js文件红叉
查看>>
Linux 学习路径图
查看>>
[LeetCode] 1. Two Sum 两数之和
查看>>
C#实现 Eval
查看>>
渗透测试流程
查看>>
Windows 压缩文件到 Linux中解压文件名乱码
查看>>
Android的ListView详解
查看>>