ZSH 脚本不使用导出的环境变量

问题描述 投票:0回答:1

我正在尝试创建一个别名来快速编译和上传 Arduino 草图。我首先将 arduino 的位置和 fqbn 添加为 shell 变量,但这会减慢每个 shell 的启动速度,因此我决定添加一个检查,并且仅导出尚未导出的变量。现在,即使在导出变量的函数运行后我可以

echo
它们,脚本似乎也无法访问变量。来自 shell 的错误似乎表明当脚本调用变量时变量仍然为空,即使我在同一个 shell 中第二次运行它也是如此。这是我所指的函数和别名:

function dweeno() {
  export DWEENOFQBN="$(arduino-cli board list | grep USB | awk '{print $(NF-1)}')"
  export DWEENOLOC="$(arduino-cli board list | grep USB | awk '{print $1}')"
}
function dweenocheck() {
  if [ -z $DWEENOFQBN ]; then
    dweeno
  fi
}
alias acu="dweenocheck && arduino-cli compile --fqbn $DWEENOFQBN $1 && arduino-cli upload -p $DWEENOLOC --fqbn $DWEENOFQBN $1"
arduino zsh avr arduino-cli
1个回答
0
投票

您的别名使用变量 DWEENOFQBN 等,但在您定义别名时,该变量还没有值。您可以通过设置来验证这一点

`set -u`

在你的脚本之上。

另一个问题是您使用

$1
,在定义别名时它也没有值。因此,您的别名定义实际上是

alias acu="dweenocheck && arduino-cli compile --fqbn && arduino-cli upload -p --fqbn"

您可以通过在别名定义中使用单引号来解决导出变量的问题,但这仍然无法解决

$1
的问题。位置参数在别名中没有意义。

因此,唯一明智的解决方案是将别名转换为函数。

© www.soinside.com 2019 - 2024. All rights reserved.