如何从指定路径反向递归查找BUILD.bazel文件并终止
修正后的Shell脚本实现
下面是完善后的脚本,可实现从指定路径反向递归查找BUILD.bazel的需求,找到目标文件或到达根目录src时立即终止:
apath="src/services/team" root_dir="src" bazel_cov_req=() recursive_find_bazel_file_in_apath() { local current_path="$apath" local bbf="BUILD.bazel" while true; do # 检查当前路径是否存在目标文件 if [ -f "${current_path}/${bbf}" ]; then bazel_cov_req+=(//"${current_path}") break fi # 到达根目录则终止查找 if [ "${current_path}" = "${root_dir}" ]; then break fi # 获取父目录路径,无需cd操作 current_path=$(dirname "${current_path}") done } # 执行查找 recursive_find_bazel_file_in_apath # 可选:打印验证结果 echo "找到的BUILD.bazel路径:${bazel_cov_req[@]}"
关键改进说明:
- 摒弃cd操作:用
dirname直接解析父目录路径,不会改变脚本的工作目录,避免路径混乱 - 清晰的终止逻辑:通过
break分别处理"找到目标文件"和"到达根目录"两种终止场景,逻辑更直观 - 局部变量隔离:函数内用
local定义current_path,避免污染全局变量 - 路径拼接严谨:确保文件路径与Bazel目标路径的拼接无语法错误
内容的提问来源于stack exchange,提问作者AhmFM
相关产品推荐
相关产品推荐

