linux中的.bash_profile、profile、bashrc详解

发布时间:2020-06-18编辑:脚本学堂
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,并从/etc/profile.d目录的配置文件中搜集shell的设置。

/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,并从/etc/profile.d目录的配置文件中搜集shell的设置。
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。
~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件。

另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系。
~/.bash_profile 是交互式、login 方式进入 bash 运行的
~/.bashrc 是交互式 non-login 方式进入 bash 运行的

通常二者设置大致相同,所以通常前者会调用后者。
 

复制代码 代码如下:

   [yangkai@admin ~]$ cat .
    ./ .bash_history .bash_profile .mozilla/ .Xauthority
    ../ .bash_logout .bashrc .viminfo .zshrc
    [yangkai@admin ~]$ cat .bashrc
    # .bashrc

    # Source global definitions
    if [ -f /etc/bashrc ]; then
        . /etc/bashrc
    fi

    # User specific aliases and functions
    [yangkai@admin ~]$ 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
    #echo "hello,kaige."
    echo 'hello,kaige!this is 132.'
    sleep 1
    [yangkai@admin ~]$ cat .bash_logout
    # ~/.bash_logout

    /usr/bin/clear
    echo 'bye,kaige!'
    [yangkai@admin ~]$
    [yangkai@admin ~]$ cat /etc/bashrc
    # /etc/bashrc

    # System wide functions and aliases
    # Environment stuff goes in /etc/profile

    # By default, we want this to get set.
    # Even for non-interactive, non-login shells.
    if [ $UID -gt 99 ] && [ "`id -gn`" = "`id -un`" ]; then
    umask 002
    else
    umask 022
    fi

    # are we an interactive shell?
    if [ "$PS1" ]; then
        case $TERM in
    xterm*)
    if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
    PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
    else
        PROMPT_COMMAND='echo -ne "33]0;${USER}@${hostname%%.*}:${PWD/#$HOME/~}"; echo -ne "07"'
    fi
    ;;
    screen)
    if [ -e /etc/sysconfig/bash-prompt-screen ]; then
    PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen
    else
    PROMPT_COMMAND='echo -ne "33_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "33"'
    fi
    ;;
    *)
    [ -e /etc/sysconfig/bash-prompt-default ] && PROMPT_COMMAND=/etc/sysconfig/bash-prompt-default
       ;;
        esac
        # Turn on checkwinsize
        shopt -s checkwinsize
        [ "$PS1" = "s-v$ " ] && PS1="[u@h W]$ "
    fi

    if ! shopt -q login_shell ; then # We're not a login shell
    # Need to redefine pathmunge, it get's undefined at the end of /etc/profile
        pathmunge () {
    if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
    if [ "$2" = "after" ] ; then
    PATH=$PATH:$1
    else
    PATH=$1:$PATH
    fi
    fi
    }

    # Only display echos from profile.d scripts if we are no login shell
        # and interactive - otherwise just process them to set envvars
        for i in /etc/profile.d/*.sh; do
            if [ -r "$i" ]; then
                if [ "$PS1" ]; then
                    . $i
                else
                    . $i >/dev/null 2>&1
                fi
            fi
        done

    unset i
    unset pathmunge
    fi
    # vim:ts=4:sw=4
    [yangkai@admin ~]$