source, ~/.bashrc, ~/.bash_profile解读

【source】

        source命令的作用就是用来执行一个脚本,那么:source a.sh 同直接执行 ./a.sh 有什么不同呢? 比如你在一个脚本里export $KKK=111 ,如果你用./a.sh执行该脚本,执行完毕后,你运行 echo $KKK ,发现没有值,如果你用source来执行 ,然后再echo ,就会发现KKK=111。因为调用./a.sh来执行shell是在一个子shell里运行的,所以执行后,结构并没有反应到父shell里,但是source不同它就是在本shell中执行的,所以可以看到结果。

【在登录Linux时要执行文件的过程如下:】

在刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或 ~/.profile文件中的其中一个,
执行的顺序为:~/.bash_profile、 ~/.bash_login、 ~/.profile。
如果 ~/.bash_profile文件存在的话,一般还会执行 ~/.bashrc文件。
因为在 ~/.bash_profile文件中一般会有下面的代码:

if [ -f ~/.bashrc ] ; then
   ../bashrc
fi
~/.bashrc中,一般还会有以下代码:
if [ -f /etc/bashrc ] ; then
   ./etc/bashrc
fi

所以,~/.bashrc会调用 /etc/bashrc文件。最后,在退出shell时,还会执行 ~/.bash_logout文件。
执行顺序为: /etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout

关于各个文件的作用域

(1) /etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。
(2) /etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取(即每次新开一个终端,都会执行bashrc)。
(3) ~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。默认情况下,设置一些环境变量,执行用户的.bashrc文件。
(4) ~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
(5) ~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件.                                                      另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承 /etc/profile中的变量,他们是"父子"关系。
(6) ~/.bash_profile: 是交互式、login 方式进入 bash 运行的; ~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。

Linux环境变量说明表格:

位置说明
/etc/profile作用于所有用户,用户登录时被执行,.并从/etc/profile.d目录的配置文件中搜集shell的设置.,修改后需重启生效,此修改对每个用户都生效;
/etc/bashrc作用于所有用户,每次启用bash shell时被执行,修改后重新打开一个shell就生效
~/.bash_profile作用于当前用户,用户登录时被执行,修改后需重启生效
~/.bashrc作用于当前用户,每次登录bash shell时被执行,修改后重新打开一个窗口即可生效
~/.bash_logout当每次退出系统(退出bash shell)时,执行该文件. 

【/etc/profile和/etc/environment等各种环境变量设置文件的用处】

①先将export LANG=zh_CN加入/etc/profile,退出系统重新登录,登录提示显示英文。
②先将/etc/profile 中的export LANG=zh_CN删除,将LNAG=zh_CN加入/etc/environment,退出系统重新登录,登录提示显示中文。


        用户环境建立的过程中总是先执行/etc/profile,然后再读取/etc/environment。为什么会有如上所叙的不同呢?而不是先执行/etc/environment,后执行/etc/profile呢?
这是因为: /etc/environment是设置整个系统的环境,而/etc/profile是设置所有用户的环境,前者与登录用户无关,后者与登录用户有关。
        系统应用程序的执行与用户环境可以是无关的,但与系统环境是相关的,所以当你登录时,你看到的提示信息,如日期、时间信息的显示格式与系统环境的LANG是相关的,缺省LANG=en_US,如果系统环境LANG=zh_CN,则提示信息是中文的,否则是英文的。
       对于用户的shell初始化而言是先执行/etc/profile(用户环境),再读取文件/etc/environment(系统环境);对整个系统而言是先执行/etc/environment:

登陆系统时的顺序应该是:
/etc/enviroment --> /etc/profile --> $HOME/.profile -->$HOME/.env (如果存在)
/etc/profile 是所有用户的环境变量
/etc/enviroment是系统的环境变量
登陆系统时shell读取的顺序应该是:
/etc/profile ->/etc/enviroment -->$HOME/.profile -->$HOME/.env

(参考:Linux 中/etc/profile、~/.bash_profile 环境变量配置及执行过程_碧空独云的博客-CSDN博客


 

### 如何配置或修改 `~/.zshrc` 和 `~/.bash_profile` 文件 #### 配置 `.zshrc` 文件 `.zshrc` 是 Z Shell 的主要配置文件,用于定义环境变量、别名和其他自定义设置。以下是具体操作: 1. **打开并编辑 `.zshrc`** 使用文本编辑器(如 Vim 或 Nano)打开该文件: ```bash vim ~/.zshrc ``` 2. **添加环境变量** 如果需要设置新的环境变量,可以按照以下格式添加: ```bash export VARIABLE_NAME=value ``` 例如,设置 Java 家目录: ```bash export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home ``` 3. **添加路径到 `$PATH`** 若要将某个目录加入系统的可执行路径中,可以这样写: ```bash export PATH=$PATH:/new/directory/path ``` 4. **定义别名** 别名可以帮助简化常用命令的操作: ```bash alias ll='ls -la' alias gs='git status' ``` 5. **启用其他配置文件** 若希望加载旧的 Bash 配置文件(如 `.bash_profile`),可以在 `.zshrc` 中通过以下方式实现: ```bash [[ -f ~/.bash_profile ]] && source ~/.bash_profile ``` 此外,在 macOS Catalina (10.15) 及更高版本上,默认情况下不再自动加载 `.bash_profile`[^3]。 6. **应用更改** 编辑完成后保存文件,并重新加载配置以使更改生效: ```bash source ~/.zshrc ``` --- #### 配置 `.bash_profile` 文件 `.bash_profile` 主要适用于基于 Bash 的终端会话初始化过程中的全局和用户特定设置。 1. **打开并编辑 `.bash_profile`** 类似于 `.zshrc`,可以通过以下命令编辑此文件: ```bash nano ~/.bash_profile ``` 2. **设置环境变量** 添加必要的环境变量声明语句: ```bash export MAVEN_HOME=/path/to/maven export GRADLE_HOME=/path/to/gradle ``` 3. **扩展 `$PATH`** 更新 `$PATH` 来包含新工具的位置: ```bash export PATH=$MAVEN_HOME/bin:$GRADLE_HOME/bin:$PATH ``` 4. **创建快捷命令** 设置一些常用的 shell 命令缩写形式作为别名: ```bash alias gp='git push origin main' alias grv='git remote -v' ``` 5. **导入额外脚本** 当存在多个辅助性的启动脚本时,可通过如下指令引入它们的内容: ```bash if [ -f ~/.bashrc ]; then . ~/.bashrc fi ``` 6. **激活改动后的配置** 修改完毕之后记得刷新当前 session 才能立即看到效果: ```bash source ~/.bash_profile ``` 注意:如果正在使用的操作系统已经切换至 zsh,则可能需要手动调整逻辑来确保这些设定仍然有效[^4]。 --- ### 示例代码片段展示 下面分别给出两个例子供参考学习如何正确编写上述提到的相关部分。 **针对 `.zshrc`:** ```bash # 导入 bash profile 支持向后兼容性 [[ -r "$HOME/.bash_profile" ]] && . "$HOME/.bash_profile" # 自定义提示符样式 export PROMPT='%F{blue}%n@%m%f %F{yellow}%~$%f ' # 开启历史记录功能增强选项 HISTSIZE=10000 SAVEHIST=10000 setopt INC_APPEND_HISTORY TIME_STAMPS ``` **面向 `.bash_profile`:** ```bash # 初始化基本开发框架支持 if [ -d "/usr/local/opt/python/libexec/bin/" ];then export PATH="/usr/local/opt/python/libexec/bin/:$PATH" fi # 加载 rbenv Ruby 版本管理插件 eval "$(rbenv init -)" ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值