Ubuntu嵌入式开发 export环境变量

前言

嵌入式新手在 Ubuntu 配置交叉编译工具链时,几乎只会看到 export PATH=$PATH:/xxx 这一种写法,对老师讲的通用公式export 变量名=值 非常困惑。

为什么别的变量可以直接赋值,唯独 PATH 要拼接?引号什么时候加、什么时候不用?永久配置到底用 .bashrc还是 profile

一、export 通用万能语法(所有环境变量都遵守)

标准模板

复制代码
export 变量名=值

核心规则

  • = 左右绝对不能有空格,否则直接报错

  • export:将变量升级为全局变量,内核编译、Shell 脚本都能识别

  • 不加 export 仅当前终端临时有效

嵌入式高频非 PATH 变量(编译内核必用)

这类变量直接覆盖赋值,不需要拼接旧值:

复制代码
# CPU架构 export ARCH=arm64

# 交叉编译器前缀 export CROSS_COMPILE=aarch64-linux-gnu-

# 内核源码路径 export KERNEL_SRC=/home/ubuntu/linux

查看变量:echo $ARCH

二、PATH 环境变量详解(嵌入式重点)

PATH 是系统命令搜索路径 。执行 ls、gcc、交叉编译器时,系统会按 PATH 里的目录依次查找程序,多个目录用 : 分隔。

1. 绝对不能写的致命错误

复制代码
# 千万不要直接覆盖!会清空所有系统命令 
   ​​​​​​​export PATH=/mnt/hgfs/2-shell

++一旦执行,ls、sudo、gcc 全部失效。++

2. 正确 PATH 追加写法(课堂标准写法)

复制代码
export PATH=$PATH:/mnt/hgfs/CS2618/2-Linux基础/2-code/2-shell

原理:

  • $PATH:保留系统原有所有路径,保护系统命令

  • ::Linux 路径分隔符

  • 后面路径:新增自己的工具链、脚本目录

3. 引号完整讲解(新手最容易踩坑)

复制代码
# 写法1:课堂简写,临时输入完全可用 

export PATH=$PATH:/mnt/hgfs/CS2618/2-Linux基础/2-code/2-shell 

# 写法2:规范双引号 "" ,推荐写入永久配置 

export PATH="$PATH:/mnt/hgfs/CS2618/2-Linux基础/2-code/2-shell" 

# 写法3:错误!禁止使用单引号 '' 

export PATH='$PATH:/mnt/hgfs/xxx'

详细区别:

  • 无引号:临时手动输入简单路径没问题

  • 双引号 "" :可以解析 $PATH,兼容空格、中文、复杂路径,适合永久配置

  • 单引号 '' :**完全不解析任何 符号** ,会把 `PATH` 当成普通文本字符串,导致路径赋值彻底失效,绝对禁止!

4. PATH 两种优先级写法

复制代码
# 追加末尾(日常推荐,系统命令优先)
 
export PATH=$PATH:/opt/gcc-arm/bin 

# 放最前面(调试专用,自己的工具链优先) 

export PATH=/opt/gcc-arm/bin:$PATH

5. 底层逻辑统一

  • PATH 不是特殊语法,只是通用公式的变形:
  • 通用公式:export 变量=值
  • PATH 逻辑:export PATH=旧PATH内容+新目录

三、永久环境变量两种配置文件(必区分)

1. 用户级配置 ~/.bashrc(个人开发首选)

只对当前用户生效、安全、无风险、嵌入式开发默认使用。

复制代码
vim ~/.bashrc 
source ~/.bashrc
  1. 系统级配置 /etc/profile(全局所有用户)

全部用户生效,需要 root 权限,适合多人服务器统一配置。

复制代码
sudo vim /etc/profile 
source /etc/profile

注:/etc/environment 系统底层路径,新手不要改。

四、两种生效方式

1. 临时生效

终端直接输入,关闭终端失效,适合临时测试。

复制代码
export PATH=$PATH:/opt/gcc-arm/bin 
export ARCH=arm64

2. 永久生效

  • 个人开发:写入 ~/.bashrc

  • 多人服务器:写入 /etc/profile

  • 改完必须 source 重载

五、嵌入式标准永久配置模板

复制代码
# 内核编译全局参数 

export ARCH=arm64 export CROSS_COMPILE=aarch64-linux-gnu- 

# 交叉工具链路径 

export PATH="$PATH:/opt/gcc-arm/bin" 

# 课程脚本路径 

export PATH="$PATH:/mnt/hgfs/CS2618/2-Linux基础/2-code/2-shell"

六、高频常用命令

复制代码
echo $PATH 
# 查看当前路径 

echo $ARCH 
# 查看自定义变量 

unset ARCH 
# 删除环境变量 

source ~/.bashrc 
# 重载个人配置 

source /etc/profile 
# 重载全局配置

七、核心总结

  1. export 变量=值所有环境变量的通用语法

  2. PATH 不能直接覆盖,必须用 $PATH: 拼接,防止系统命令报废。

  3. 临时命令可不带引号,永久配置必须双引号 "",禁止单引号 ''

  4. 个人开发用 ~/.bashrc,多人服务器统一用 /etc/profile

相关推荐
gf13211111 小时前
【python_回复邮件】
android·java·python
攻城有术1 小时前
专项攻克——重写 Redis 依赖包方法的 6 种实现方式
java·数据库·redis·bootstrap
ynchyong1 小时前
JavaScript Promise 实战:.then() 与 .catch() 的区别及回调函数封装指南
开发语言·javascript·ecmascript·promise·then
跨境数据猎手1 小时前
京东开放平台商品详情接口(jd.item_get):签名、缓存与批量采集
java·spring·缓存
IvorySQL1 小时前
基于 PostgreSQL 的非线性回归原理与 AI 数据库融合实践
数据库·人工智能·postgresql
名字还没想好☜1 小时前
Go 1.21 context.WithoutCancel 实战:父 context 取消了,收尾任务还要继续跑
开发语言·后端·golang·go
赵渝强老师1 小时前
【赵渝强老师】高斯数据库(openGauss)的数据库对象
数据库·postgresql·opengauss·国产数据库·高斯数据库
DLYSB_1 小时前
交换机不会 HTTP 怎么办:用 SNMP Get / Trap 把指标和中断打到博灵声光 TTS
数据库·报警灯
wdfk_prog1 小时前
canopennode-rtt推荐,不只可以做从站,也可以承担主站角色
c语言·开发语言·数据库·学习·算法·深度优先