记录linux shell一个小坑点

SHELL启动执行文件

Linux命令行与shell脚本编程大全 第三版


首先,需要知道SHELL登陆是有三种不同的方式的,这样加载的文件也有所不同。

  • 登录时作为默认登陆shell
  • 作为非登陆shell的交互式shell
  • 作为运行脚本的非交互shell

登录时作为默认登陆shell

当你登录shell是,bash shell作为登录shell启动,shell会从5个不同的启动文件里读取命令:

  • /etc/profile
  • $HOME/.bash_profile
  • $HOME/.bashrc
  • $HOME/.bash_login
  • $HOME/.profile
/etc/profile

/etc/profile 文件是系统上默认的bash shell 的主启动文件。系统中每个用户登录时都会执行这个启动文件。

/etc/profile 文件中用到了一个特性,迭代/etc/profile.d目录下的所有文件。这是linux中放置特定应用程序启动文件的地方,当用户登录时,shell会执行这些文件。

$HOME目录下的启动文件

他们的作用是提供一个用户专属的启动文件来定义该用户所用到的环境变量。
大多数Linux发行版只会用这四个启动文件中的一到两个

  • $HOME/.bash_profile
  • $HOME/.bashrc
  • $HOME/.bash_login
  • $HOME/.profile

shell会按照下列顺序,运行第一个被找到的文件,余下的则被忽略

$HOME/.bash_profile
$HOME/.bash_login
$HOME/.profile

值得注意的是,这里没有.bashrc文件。这是因为该文件通常通过其他文件运行。

比如CenterOS中.bash_profile文件就会去查找.bashrc文件,并执行里面的命令。

交互式shell

如果你的bash shell不是登陆系统时启动的,比如是在命令行中敲入bash时启动的,那么这样的shell成为交互式shell。

这时他就不会访问/etc/profile文件。只会检查.bashrc文件。

非交互式shell

系统执行shell脚本是,用的就是这种shell。他没有命令提示符。此时的非交互式bash shell会检查BASH_ENV环境变量来查看要执行的启动文件。如果有,shell会执行其中的命令,这一般包括shell脚本的变量设置。

如果这个环境变量没有哦被设置,这样的子shell是可以用到父shell导出的变量的。比如父shell是登陆shell,那么其子shell就能使用在/etc/profile、/etc/profile.d/*.sh和$HOME/.bashrc文件中设置并导出的变量。

值得注意的是,这些变量必须要export导出,子shell才能继承使用,否则这些变量是局部变量,子shell无法继承局部变量。

总结

总体来讲,比较重要的就是,用户自己定义的方法还是变量,放到.bashrc中是比较靠谱的。这样登陆shell和交互shell,都会读取这个文件。而/etc/profile这个虽然是可以设置系统级别的。但是非登陆的交互式shell不会读取。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值