Github 操作 - 包含空格的 bash 命令不会运行



我正在尝试动态构建一个在github操作中运行的bash命令。我的步骤如下:

- name: Build PREPROD
run: |
# Generate dart-define values from the preprod.env file
DART_DEFINES_PREPROD="$(scripts/some_script.sh)"
echo $DART_DEFINES_PREPROD
# Build the apk
flutter build apk ${DART_DEFINES_PREPROD}

我在scripts/some_script.sh中的脚本所做的是转换环境文件的内容,如下所示:

APP_NAME=nameOfMyApp preprod
APP_SUFFIX=.preprod

转换为类似这样的bash参数(这是在我的作业中运行echo $DART_DEFINES_PREPROD时出现的内容

--dart-define APP_NAME="nameOfMyApp preprod" --dart-define APP_SUFFIX=".preprod"

所以对我来说,它应该运行一个类似的命令

flutter build apk --dart-define APP_NAME="nameOfMyApp preprod" --dart-define APP_SUFFIX=".preprod"

这就是我想要的,当我在我的机器上本地运行它时是有效的。

然而,当上面粘贴的步骤在github Action代理上运行时,结果是以下错误:

Target file "preprod"" not found.
Error: Process completed with exit code 1.

我只是不明白这里发生了什么。我尝试过许多其他语法,它们都会产生相同的结果。

我知道问题来自我的APP_NAME变量中的空格,因为如果我用其他没有空格的东西替换它,我的步骤就可以正常工作。但由于该值包含在双引号中,我不明白为什么它被解释为两个命令,而不是一个信息。

感谢任何帮助/线索!谢谢

更新1:

好的,所以下面的@";Benjamin W;评论,我阅读了你的链接(谢谢(,我认为我做的是正确的,但它仍然失败了。这是我更新的代码:

# For clarity I removed the .sh script file to show what I'm doing inside of it
dart_defines_args=()
input="scripts/envs/preprod.env"
while IFS='=' read -r name value
do
dart_defines_args+="--dart-define "
dart_defines_args+="$name="$value" "
done < "$input"
echo "${dart_defines_args[@]}"
# Build the apk
flutter build apk ${dart_defines_args[@]}

我也用做了同样的测试

flutter build apk "${dart_defines_args[@]}"

但我最终还是得到了

Target file "--dart-define APP_NAME="nameOfMyApp preprod" --dart-define APP_SUFFIX=".preprod"

Target file "preprod"" not found.

取决于我是否在${dart_defines_args[@]}周围有双引号

我认为问题在于变量展开。

尝试更改:

flutter build apk ${DART_DEFINES_PREPROD}

对于

flutter build apk "${DART_DEFINES_PREPROD}"

最新更新