You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash辅助脚本中compgen扩展glob时部分文件名无法传递的问题

问题排查与解决

核心原因:Shell默认不匹配隐藏文件

Bash默认的glob规则里,*、?这类通配符不会匹配以.开头的文件/目录(即隐藏文件),而compgen默认继承了这个行为,所以你的辅助脚本处理时会漏掉这些隐藏文件。至于直接在命令行能工作,大概率是你的交互式shell已经开启了dotglob选项,而脚本默认以非交互模式运行,不会加载个人shell配置里的相关设置。

具体修正方案

  • 在辅助脚本中显式开启dotglob选项
    在expand-globs-in-file.sh的开头添加这行代码,让shell的glob扩展包含隐藏文件:

    shopt -s dotglob
    

    如果需要严格恢复环境,处理完glob扩展后可以关闭该选项:

    shopt -u dotglob
    
  • 检查compgen的调用逻辑
    确保你用compgen -G "$pattern"的方式调用,开启dotglob后就能正确匹配到隐藏文件。示例辅助脚本框架:

    #!/bin/bash
    shopt -s dotglob
    while read -r pattern; do
      compgen -G "$pattern"
    done < "$1"
    
  • 验证rsync输入格式
    确保扩展后的文件列表每行一个路径,无多余引号或转义字符,符合--files-from的要求。

内容的提问来源于stack exchange,提问作者Al Pacifico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 04:10:35