GitHub Actions中find命令使用通配符失效问题
解决GitHub Actions中
/**/*.xml通配符导致find命令报错的问题 问题根源
GitHub Actions默认使用的bash环境未启用globstar选项——这个选项负责让**递归匹配所有子目录下的文件。默认关闭状态下,**只会匹配当前目录的文件,导致你传入的test-results/unit-test-results-ui/**/*.xml无法展开成实际的嵌套目录文件路径,最终触发"No such file or directory"错误。
解决方案
方案1:在工作流步骤中临时启用globstar
直接在执行脚本的步骤里开启globstar,让bash正确展开递归通配符:
- name: Upload UI unit test results to DoT run: | shopt -s globstar ./scripts/dot-upload.sh test-results/unit-test-results-ui/**/*.xml shell: bash
方案2:修改dot-upload.sh脚本自身处理递归查找
如果不想改动工作流结构,可以在脚本内部处理路径逻辑,用find命令主动递归查找xml文件:
# 在dot-upload.sh开头添加逻辑 if [ $# -eq 0 ]; then echo "请传入文件路径或目录" exit 1 fi # 处理传入的路径:如果是目录,递归找所有xml;否则直接使用传入的文件 if [ -d "$1" ]; then TARGET_FILES=$(find "$1" -type f -name "*.xml") else # 尝试展开通配符(如果脚本运行环境支持的话) shopt -s globstar nullglob TARGET_FILES=("$1") fi # 后续使用TARGET_FILES变量进行处理
方案3:在工作流中用find生成文件列表后传给脚本
绕开通配符问题,直接用find命令找到所有目标文件,再传递给脚本:
- name: Upload UI unit test results to DoT run: | # 找到所有xml文件,用数组存储避免空格问题 mapfile -t FILES < <(find test-results/unit-test-results-ui -type f -name "*.xml") ./scripts/dot-upload.sh "${FILES[@]}" shell: bash
内容的提问来源于stack exchange,提问作者k_rollo
相关产品推荐
相关产品推荐

