我正在尝试创建一个别名来快速编译和上传 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"
您的别名使用变量 DWEENOFQBN 等,但在您定义别名时,该变量还没有值。您可以通过设置来验证这一点
`set -u`
在你的脚本之上。
另一个问题是您使用
$1
,在定义别名时它也没有值。因此,您的别名定义实际上是
alias acu="dweenocheck && arduino-cli compile --fqbn && arduino-cli upload -p --fqbn"
您可以通过在别名定义中使用单引号来解决导出变量的问题,但这仍然无法解决
$1
的问题。位置参数在别名中没有意义。
因此,唯一明智的解决方案是将别名转换为函数。