linux - .bash_profile .bash_rc 什么区别
大家讲道理
大家讲道理 2017-04-17 11:06:23
[Linux讨论组]

以前公司的Linux貌似写.bash_profile是不管用的,所以一些alias和PS1都是写在bashrc里
现在自己的电脑反过来了,bashrc不管用,要写bash_profile
这两个文件到底有什么区别?是不是有哪里可以配置,让用户登陆的时候去加载某个文件的?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(4)
阿神

几个bash配置文件的说明:

/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中的变量,他们是"父子"关系.

巴扎黑

其实这个问题的核心就是 Shell 初始化时读取配置文件的步骤,而 Shell 又可以分为两类:Login Shell 和 Non-login Shell。参考博客 Execution sequence for .bash_profile,...:

1. Login Shell 初始化时配置文件读取顺序的伪代码示意:

execute /etc/profile

IF ~/.bash_profile exists THEN
    execute ~/.bash_profile
ELSE
    IF ~/.bash_login exist THEN
        execute ~/.bash_login
    ELSE
        IF ~/.profile exist THEN
            execute ~/.profile
        END IF
    END IF
END IF

2. Non-Login Shell 初始化时配置文件读取顺序的伪代码示意:

execute /etc/bash.bashrc
IF ~/.bashrc exists THEN
    execute ~/.bashrc
END IF

最后,Mac 的终端默认开启为 Login Shell。而 Ubuntu 的 Gnome Terminal 默认开启的是 Non-Login Shell.

大家讲道理

~/.bash_profile 只在当前用户登入的时候加载,~/.bashrc 在每次 Bash 初始化的时候都会加载。

阿神

经常看到 .bash_profile 里的内容是

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

有时候我也搞不清其中的关系,不过我一般都是把启动配置放在.bashrc下面,如果不管用的话,再创建上述.bash_profile。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号