Linux 环境变量一次讲清:export、PATH 与启动文件

举报
yd_283162409 发表于 2026/11/06 05:33:36 2026/11/06
【摘要】 环境变量是什么环境变量就是 shell 里全局可用的键值对,程序启动时会从父进程继承它。最常见的例子是 PATH:你在终端敲 ls,系统就是按 PATH 里列出的目录顺序去找 ls 这个程序。环境变量不写进代码、而是放在运行环境里,同一份程序换个环境就能换行为,部署时改配置不用改代码。export:只在当前 shell 生效还是传给子进程在 shell 里写 FOO=bar 只是给当前 sh...

环境变量是什么

环境变量就是 shell 里全局可用的键值对,程序启动时会从父进程继承它。最常见的例子是 PATH:你在终端敲 ls,系统就是按 PATH 里列出的目录顺序去找 ls 这个程序。环境变量不写进代码、而是放在运行环境里,同一份程序换个环境就能换行为,部署时改配置不用改代码。

export:只在当前 shell 生效还是传给子进程

在 shell 里写 FOO=bar 只是给当前 shell 设了一个局部变量,子进程看不到;export FOO=bar 之后,当前 shell 再启动的程序才能继承它。验证方法很简单:开一个子 shell 看 echo $FOO 有没有值。很多人把变量写进脚本却没 export,结果程序里读不到,就是这个原因。

PATH:命令是怎么被找到的

PATH 是一串用冒号隔开的目录。敲一个命令时,shell 按顺序在每个目录里找同名可执行文件,找到第一个就停。所以同名程序装在两个地方时,排在前面的目录 wins。往 PATH 里加自己的目录要写 PATH=$PATH:/my/bin 再 export,顺序决定优先级。注意不要把当前目录 . 放进 PATH,安全风险很大,别人在你的目录里放一个叫 ls 的恶意脚本,你一敲 ls 就中招。

启动文件:.bashrc、.profile、.bash_profile 的分工

交互式登录 shell(比如 SSH 登录)读 .bash_profile 或 .profile;非登录的交互式 shell(新开一个终端标签页)读 .bashrc。常见的坑是把 PATH 写进 .bashrc,结果通过 SSH 跑非交互命令时读不到;或者写进 .profile,结果图形终端里读不到。稳妥的做法是把环境变量集中写在一个地方,比如 .profile 里写 export,再让 .bashrc 或 .bash_profile 去引用它,避免两份配置互相打架。

临时改与永久改

只想试一次就别改文件:命令行前面直接写 FOO=bar ./run.sh,这次运行有效,退出就没了。确认没问题再写进启动文件永久生效。改完启动文件不用重登,source ~/.bashrc 就能让当前 shell 重新加载。调试时用 env | grep FOO 看变量到底有没有进来,用 echo $PATH 看 PATH 是不是你以为的那个样子,别凭感觉猜。

三个常见坑

一是等号两边加空格,FOO = bar 会被当成命令不是赋值。二是 export 写进脚本但用 sh script.sh 运行,变量只活在子 shell 里,脚本退出就消失,要用 source script.sh 才进当前 shell。三是 PATH 越改越长还重复,启动越来越慢也难排查,改之前先备份原值,echo $PATH > ~/path.bak 留个后悔药。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。