Linux 环境变量入门:export 与 PATH 的正确写法
从一个经典事故说起
刚装好的命令行工具,退出终端再进来就 command not found;本地好好的脚本,放到定时任务里就跑不起来——十有八九是环境变量没搞对。环境变量是进程的“随身档案”:它决定了去哪里找命令、用什么代理、读哪份配置。搞懂它的三层作用域,这类玄学问题就少了一大半。
三层作用域:会话、用户、系统
会话级:在当前终端 export FOO=bar,只对当前会话及其子进程生效,关窗即逝——适合临时任务或调试。用户级:写进 ~/.bashrc 或 ~/.profile,登录时自动加载,只属一个用户,最常用。系统级:/etc/profile 与 /etc/profile.d/ 目录,机器上所有用户共享,改它要谨慎。排查顺序永远是“先看当前会话有没有,再看用户级,最后才怀疑系统级”。
export 与 PATH 的正确写法
export 的意义是“把变量传给子进程”;不加 export 只在当前 shell 里可见。PATH 是最需要小心的一行,正确写法是追加而不是覆盖:export PATH=$PATH:/opt/tools/bin,丢了 $PATH: 这一段会把整条寻路清空,之后连 ls 都会失明。多个目录用冒号分隔,顺序决定优先级,最常用的放最前。
定时任务里的隐形坑
cron 等调度环境的 PATH 与登录 shell 完全不同,往往只有 /usr/bin 一类基础目录——脚本在终端跑得好好的、放进 cron 就死,八成是这个原因。两个对策:脚本内一律用绝对路径;或在脚本开头显式 source /etc/profile,把该带的家当都带上。systemd 服务同理,用 Environment= 或 EnvironmentFile= 显式声明,不靠登录环境继承。
三分钟自检姿势
用什么看:echo $FOO 查单值,env 查全量,printenv PATH 查原始串。改哪生效:~/.bashrc 每次 bash 打开加载,/etc/profile 登录加载,改完 source 一下免重登。记住一句话:会话级是草稿,用户级是存档,系统级是钞票——轻易别动。
小结
环境变量没有魔法,只有三层作用域和一条 PATH 追加法则。把“export 给子进程、追加不清空、定时任务单独配”这三句焊进肌肉记忆,command not found 就再也不是疑难杂症。
- 点赞
- 收藏
- 关注作者
评论(0)