小易说IT 小易说IT

.bashrc 配置环境变量完整教程

前置说明:

  • .bashrc:交互式 bash 终端加载(ssh 登录、本地打开终端会加载)

  • /etc/profile / /etc/bash.bashrc:全局所有用户;~/.profile 登录 shell

  • ⚠️ 生产区分:临时变量、用户级变量、全局变量;不要把敏感密钥硬写在 .bashrc 可提交版本里

一、基础语法(3 种常用写法)

编辑文件:

vim ~/.bashrc

1. 普通环境变量(最常用)

# 格式:export 变量名="值"
export JAVA_HOME="/usr/local/jdk17"
export MAVEN_HOME="/usr/local/maven"
# 追加到PATH(重点!不要直接覆盖PATH)
export PATH="${MAVEN_HOME}/bin:${JAVA_HOME}/bin:${PATH}"

✅ 一定要 ${PATH} 放最后,否则会覆盖系统原有路径,导致基础命令(ls、cd)失效!

2. 不 export(仅当前 shell 内局部变量,子进程读不到)

MY_VAR="hello"
# 子shell、外部程序无法获取,一般不用做环境变量

环境变量必须加 export,才能传递给子进程(脚本、java 程序等)

3. 多行、带空格、特殊字符

# 值带空格,必须双引号
export APP_ARGS="-Xms512m -Xmx1g"
# 单引号:原样字符串,不解析变量
export RAW_STR='$JAVA_HOME'

二、分类示例(直接复制进.bashrc)

# ========== JDK 17 ==========
export JAVA_HOME="/usr/local/jdk-17.0.12"
export PATH="${JAVA_HOME}/bin:${PATH}"

# ========== Maven ==========
export M2_HOME="/usr/local/apache-maven-3.9.8"
export PATH="${M2_HOME}/bin:${PATH}"

# ========== 自定义脚本目录(自己写的shell工具) ==========
export TOOL_BIN="${HOME}/.local/bin"
export PATH="${TOOL_BIN}:${PATH}"

# ========== 应用自定义变量(程序读取) ==========
export SPRING_PROFILES_ACTIVE="prod"
export LOG_ROOT="/data/logs"

# ========== 代理(按需开启,生产谨慎) ==========
# export HTTP_PROXY="http://127.0.0.1:7890"
# export HTTPS_PROXY="http://127.0.0.1:7890"
# export NO_PROXY="localhost,127.0.0.1,.internal"

三、生效方式(重点!改完不会自动生效)

两种方式:

  1. 只对当前终端生效:

source ~/.bashrc
  1. 新开 ssh / 终端窗口自动加载(本身就是.bashrc 设计逻辑)

❗坑:source 只作用于当前 shell,已经运行的其他终端、后台进程不会自动刷新

四、验证是否配置成功

# 查看变量
echo $JAVA_HOME
# 查看PATH
echo $PATH
# 查看所有环境变量
env | grep JAVA_HOME
# 查看命令位置
which java

五、生产避坑清单(非常重要)

  1. 不要覆盖 PATH ❌ 错误:export PATH="/xxx/bin" ✅ 正确:export PATH="/xxx/bin:${PATH}"

  2. 敏感信息(密钥、数据库密码)不要写 .bashrc 建议放在独立权限文件 ~/.env,权限 chmod 600 ~/.env,在.bashrc 里按需 source

    # .bashrc 里引入密钥文件示例
    if [ -f "${HOME}/.env" ]; then
      source "${HOME}/.env"
    fi
    

    .env 单独配置,加入 .gitignore,权限严格 600

  3. 区分登录 shell 和交互式 shell

    • ssh 有些系统优先加载 ~/.profile,.profile 内部默认会加载 .bashrc

    • 如果变量 ssh 登录不生效,可以放到 ~/.profile 或者 /etc/profile.d/(全局推荐 profile.d,不要改 profile 本体)

  4. 不要重复追加 PATH 反复 source ~/.bashrc 会让 PATH 越来越长,堆积重复路径。 👉 优化写法(判断路径不存在才加入,放进.bashrc)

    add_path() {
      if [[ ":$PATH:" != *":$1:"* ]]; then
        export PATH="$1:${PATH}"
      fi
    }
    add_path "${JAVA_HOME}/bin"
    
  5. root 用户:root 的 .bashrc 在 /root/.bashrc

六、全局环境变量(所有用户生效,补充)

如果要机器所有用户都拿到变量,推荐新建 /etc/profile.d/custom-env.sh

sudo vim /etc/profile.d/custom-env.sh
sudo chmod +x /etc/profile.d/custom-env.sh

里面写 export,登录自动加载,比直接改 /etc/profile 优雅,便于维护。