正如标题所示,我问的是 .bashrc 和 /etc/profile 之间的主要区别。我知道 .bashrc 是一个在登录时运行的 shell 脚本(我猜)。我也知道 /etc/profile 在 ssh 登录或终端登录时运行(我猜)。有人能给我指点一下吗?
答案1
我认为这回答总结得很好:
来自 man bash:
调用
[...]
当 bash 作为交互式登录 shell 或使用 --login 选项作为非交互式 shell 调用时,它首先从文件 /etc/profile 中读取并执行命令(如果该文件存在)。读取该文件后,它会按顺序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,然后从第一个存在且可读的文件中读取并执行命令。启动 shell 时可以使用 --noprofile 选项来禁止此行为。
[...]
当启动非登录 shell 的交互式 shell 时,如果 ~/.bashrc 文件存在,bash 将从该文件中读取并执行命令。可以使用 --norc 选项禁止此操作。--rcfile 文件选项将强制 bash 从文件而不是 ~/.bashrc 中读取并执行命令。
答案2
/etc/profile 对所有用户来说都是全局的。~/.bashrc 是每个用户登录的,您可以在其中设置自己喜欢的环境。
答案3
如果您知道这两个文件的执行时间取决于所执行的登录类型,那么区别就更加明显了。在 Linux 中,您可以拥有两种类型的登录 shell,即交互式 shell 和非交互式 shell。交互式 shell 用于用户可以与 shell 交互的情况,即典型的 bash 提示符。而非交互式 shell 用于用户无法与 shell 交互的情况,即 bash 脚本执行。
区别很简单,/etc/profile 仅在交互式 shell 中执行,而 /etc/bashrc 在交互式和非交互式 shell 中都执行。
概括:
etcprofile:用于启动登录shell时所有用户的默认设置。
etcbashrc:用于定义所有用户启动子shell时的默认值。
~/.profile:启动登录 shell 时应用的一个用户的特定设置。
~/.bashrc:启动子shell时应用的一个用户的特定设置。