TraceLife

真正的幸福,在于对平淡生活的热爱……

导航

linux shell configuration files

Posted on 2012-04-27 15:51  hallo  阅读(699)  评论(0编辑  收藏  举报

在 Unix* Like 环境下工作时,不免会遇到 bash 环境变量的配置。而每次面对 $HOME 目录下的一些 .bash* 文件时,总会暂时性的忘记该修改那个好。

实际中在那个文件中添加配置信息都没有问题,都可以正常工作。那为什么要设置两个配置文件呢?它们的区别是什么?

查找 bash 的帮助文档。可以找到下面的描述。

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

.bash_profile 在登录 shell 时执行,而 .bashrc 会在不是以 login 方式打开 shell 时执行(比如执行 /bin/bash )。

login shell vs non-login shell

不论你是坐在电脑旁或者通过 ssh 远程登录主机,以用户名/密码登录终端时,.bash_profile 都会在初始化命令行提示符之前执行。

如果你已登录到机器上,并且在 Gnome 或 KDE 桌面下打开了一个新的终端(通常这种方式打开 xterm),那么 .bashrc 会在初始化命令行提示符之前执行。当然上面提到的,通过在终端执行 /bin/bash 开启一个新的 bash 示例时,同样也会调用 .bashrc 。

.bash_profile vs .bashrc

举例来说,如果你想在每次登录机器时,都在终端打印机器的诊断信息(当前用户,内存使用、负载均衡等),则需要将配置信息写入 .bash_profile。而如果你想在每次打开终端时进行提示,则记入 .bashrc 。

这样做的好处是针对某些应用场景,可以进行更精细的配置。

上面的描述并不适用于 Mac OS ,对于 Terminal.app ,每次运行时,都只执行 .bash_profile。

那到底写到哪个文件呢?

大多数情况下,你不想为 login shell 和 non-login shell 两种方式分别维护配置文件,因为实际上维护的这两个配置文件通常用完成相似的工作。比如设定 PATH 环境变量,希望在两种方式下都能正常执行,你可以在 .bash_profile 中执行 source .bashrc 命令,并将 PATH 变量设置信息存放到 .bashrc 中。

vim ~/.bash_profile

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

这种情况下,在 login 到机器时,.bashrc 文件也会被执行。

现在新版的 Linux 通常也都已经考虑到了这个问题,通常都会在 .bash_profile 中添加如下的代码:

[root@vsso ~]# cat .bash_profile 
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
unset USERNAME

所以一般性的共通内容,都可以写入到 .bashrc 文件中。