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

如何编写Bash单行命令将Git非删除文件传入dip sniff fix并支持相对路径?

解决方案

最终单行命令

git diff --name-only --relative --diff-filter=d HEAD | xargs -d '\n' -r script -q /dev/null -c 'dip sniff fix "$@"' _

命令拆解

  • git diff --name-only --relative --diff-filter=d HEAD

    • --name-only:仅输出变更文件的路径
    • --relative:输出相对于当前子目录的路径,确保在项目任意子目录都能正确运行
    • --diff-filter=d:过滤掉已删除(deleted)的文件,只保留修改、新增的文件
    • HEAD:对比当前工作区与最新提交的差异,获取所有待处理的有效文件
  • xargs -d '\n' -r

    • -d '\n':以换行符作为参数分隔符,完美处理带空格、特殊字符的文件名
    • -r:当没有符合条件的文件时,不执行后续命令,避免dip无参数运行报错
  • script -q /dev/null -c 'dip sniff fix "$@"' _

    • script -q /dev/null:静默模式下模拟TTY环境,彻底解决the input device is not a TTY错误
    • -c 'dip sniff fix "$@"':执行dip修复命令,$@接收所有从xargs传递来的文件路径
    • _:作为脚本的占位参数,保证$@能正确映射到传入的文件列表

备选方案(依赖expect工具)

如果系统没有script命令,可安装expect包后使用unbuffer:

git diff --name-only --relative --diff-filter=d HEAD | xargs -d '\n' -r unbuffer dip sniff fix

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:10:34