What is the difference between the various shell profiles?

后端 未结 2 742
萌比男神i
萌比男神i 2021-02-15 17:44

What\'s the difference between ~/.bashrc, ~/.bash_login, ~/.bash_logout, ~/.bash_profile, ~/.profile, /etc/profile, /etc/bash.bashrc, /etc/ssh/ssh_config and sshd_config, when a

2条回答
  •  春和景丽
    2021-02-15 18:08

    The man page for bash says there are the following initialization files for bash shells:

    /etc/profile
          The systemwide initialization file, executed for login shells
    /etc/bash.bashrc
          The systemwide per-interactive-shell startup file
    /etc/bash.bash.logout
          The systemwide login shell cleanup file, executed when a login shell exits
    ~/.bash_profile
          The personal initialization file, executed for login shells
    ~/.bashrc
          The individual per-interactive-shell startup file
    ~/.bash_logout
          The individual login shell cleanup file, executed when a login shell exits
    ~/.inputrc
          Individual readline initialization file
    

    Apparently there seem to be different configuration files for the different shells (bash, zsh, csh, and others). There seem to be as many shells as different linux and unix versions: csh, ksh, bash, zsh, ... Bash has a .bashrc, Zsh has a .zshrc, etc. One can also distinguish between login shells and non-login shells and between system-wide defaults and user-specific defaults.

    It makes sense to distinguish between login and non-login shells, because some commands should be processed only at login, while other commands should run everytime you open a new terminal window. That is the difference between .bash_profile and .bashrc. For bash the .bashrc is reloaded every time you start a new copy of bash, i.e. when you start a new bash but do not login. The .bash_profile or .profile is loaded only when you login. The abbtreviation rc in bashrc stands for "run commands" or "run control" and is a convention adopted from older Unix systems.

    system-wide defaults for..

    • /etc/profile ..login shells, for interactive shells with login
    • /etc/bashrc ..non-login Bash shells

    user-specific defaults in home directory ~ for..

    • ~/.profile ..login shells, called after login
    • ~/.bashrc ..non-login shells, if already logged in
    • ~/.bash_profile ..login shells, called after login (lower priority)

    user-specific defaults in home directory for login and logout

    • ~/.bash_login ..login shells (called upon login)
    • ~/.bash_logout ..login shells (called upon logout)

    The following links were helpful: .bashrc vs .bashprofile and .bash_profile vs .bashrc, the bash manual page (man bash), and Zsh/Bash startup files loading order (.bashrc, .zshrc etc.).

提交回复
热议问题