You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ZSH脚本无法读取已导出环境变量问题求助

问题分析

你的问题出在别名的变量展开时机和别名对参数的支持限制上:

  1. 别名用双引号定义时,内部的$DWEENOFQBN、$DWEENOLOC和$1会在定义别名的瞬间就被Shell解析(此时这些变量/参数都是空值),而不是等到执行别名时才动态获取。
  2. Shell别名本身不支持位置参数(比如$1),即使写了也无法正确捕获传入的草图路径。
解决方案

把acu从别名改成函数,这样所有变量和参数都会在执行时动态解析,同时优化dweeno函数减少重复命令调用:

# 获取Arduino设备信息,仅执行一次board list命令提升效率
function dweeno() {
  local board_info=$(arduino-cli board list | grep USB)
  export DWEENOFQBN=$(echo "$board_info" | awk '{print $(NF-1)}')
  export DWEENOLOC=$(echo "$board_info" | awk '{print $1}')
}

# 检查变量是否存在,不存在则自动初始化
function dweenocheck() {
  if [ -z "${DWEENOFQBN:-}" ]; then
    dweeno
  fi
}

# 替换原别名为函数,支持参数且动态解析变量
function acu() {
  dweenocheck
  arduino-cli compile --fqbn "$DWEENOFQBN" "$1" && \
  arduino-cli upload -p "$DWEENOLOC" --fqbn "$DWEENOFQBN" "$1"
}

修改说明

  • 用函数替代别名:确保变量和参数在执行阶段才展开,避免提前解析为空值。
  • 优化dweeno函数:仅执行一次arduino-cli board list,减少重复命令的性能开销。
  • 变量安全判断:用${DWEENOFQBN:-}避免变量未定义时出现Shell语法错误。

内容的提问来源于stack exchange,提问作者Dot Rose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 06:52:50