前置说明:
.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"
三、生效方式(重点!改完不会自动生效)
两种方式:
只对当前终端生效:
source ~/.bashrc
新开 ssh / 终端窗口自动加载(本身就是.bashrc 设计逻辑)
❗坑:
source只作用于当前 shell,已经运行的其他终端、后台进程不会自动刷新
四、验证是否配置成功
# 查看变量
echo $JAVA_HOME
# 查看PATH
echo $PATH
# 查看所有环境变量
env | grep JAVA_HOME
# 查看命令位置
which java
五、生产避坑清单(非常重要)
不要覆盖 PATH ❌ 错误:
export PATH="/xxx/bin"✅ 正确:export PATH="/xxx/bin:${PATH}"敏感信息(密钥、数据库密码)不要写 .bashrc 建议放在独立权限文件
~/.env,权限chmod 600 ~/.env,在.bashrc 里按需 source# .bashrc 里引入密钥文件示例 if [ -f "${HOME}/.env" ]; then source "${HOME}/.env" fi.env单独配置,加入.gitignore,权限严格 600区分登录 shell 和交互式 shell
ssh 有些系统优先加载
~/.profile,.profile内部默认会加载.bashrc如果变量 ssh 登录不生效,可以放到
~/.profile或者/etc/profile.d/(全局推荐 profile.d,不要改 profile 本体)
不要重复追加 PATH 反复 source ~/.bashrc 会让 PATH 越来越长,堆积重复路径。 👉 优化写法(判断路径不存在才加入,放进.bashrc)
add_path() { if [[ ":$PATH:" != *":$1:"* ]]; then export PATH="$1:${PATH}" fi } add_path "${JAVA_HOME}/bin"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 优雅,便于维护。