.bash_profile, .bashrc, login shell与normal shell

Bash下每个用户都可以配置两个初始文件:.bash_profile和.bashrc。man bash中的相关解释如下:

~/.bash_profile
The personal initialization file, executed for login shells
~/.bashrc
The individual per-interactive-shell startup file

以前一直没细想两者的区别,今天整理了一下。

每次bash作为login shell启动时会执行.bash_profile。

主要有(我所知道的)有以下几种情形:

  • 每次登录到服务器时默认启动的shell
  • “su -l [USER]”时进入的shell
  • “bash —login”进入的shell

每次bash作为普通的交互shell(interactive shell)启动时会执行.bashrc

常见的有:

  • “su [USER]”进入的shell
  • 直接运行“bash”命令进入的shell。

注意

  • 在shell脚本中“#!/usr/bin/bash”启动的bash并不执行.bashrc。因为这里的 bash不是interactive shell。
  • bash作为login shell(login bash)启动时并不执行.bashrc。虽然该shell也是interactive shell,但它不是普通的shell。

一般.bash_profile里都会调用.bashrc

尽管login bash启动时不会自动执行.bashrc,惯例上会在.bash_profile中显式调用.bashrc。

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

试验脚本

用以下文件可以很方便的验证以上所述。

-bash-2.05b$ cat .bashrc
echo "in bashrc"
export TEST="rc"

-bash-2.05b$ cat .bash_profile
echo "in bash profile"

-bash-2.05b$ cat test.sh
#!/bin/bash
echo $TEST
bash-2.05b$

posted on 2009-02-23 10:02  starspace  阅读(651)  评论(0编辑  收藏  举报

导航