Jenkins Pipeline执行Shell时目录含空格导致文件存在却识别不到如何解决
问题根源
该问题是Shell语法使用不规范导致的,并非Jenkins无法识别带空格的目录:
- Shell默认将空格作为参数分隔符,含空格的路径未做引号包裹时,变量赋值、引用阶段都会被拆分为多个独立字符串,导致路径识别错误
- 原有代码还存在路径重复拼接的逻辑错误:
DEPLOY_FILE已经包含$WORKSPACE前缀,输出时再次拼接$WORKSPACE会生成错误的路径格式 - 额外存在拼写错误:判断存在的输出语句里
exits应为exists
修复方案
核心修复规则
- 含空格的路径在变量赋值时必须用双引号包裹,保证整个路径作为完整字符串赋值
- 所有路径变量引用的位置都要包裹双引号,避免解析时被空格拆分
完整修复后代码
# 赋值时用双引号包裹含空格的路径 DEPLOY_FILE="$WORKSPACE/Refrens data/11. metadata/file.xml" if [[ -s "$DEPLOY_FILE" ]]; then echo "$DEPLOY_FILE exists in Bitbucket" echo "" else echo "$DEPLOY_FILE does not exist in Bitbucket" exit 1; fi
额外说明
如果需要从根源避免空格带来的各类解析问题,也可以将目录命名中的空格替换为下划线、连字符等无特殊语义的字符,但上述引号包裹方案已经可以完全解决路径含空格的解析问题。
内容的提问来源于stack exchange,提问作者pyramid13
相关产品推荐
相关产品推荐

