5

我已经签出了一个项目,该项目包含一个.gitignore文件。

这个文件的内容是这样的

vx1% head .gitignore 
./deps
/*.exe
/*.la
/.auto
.libs
ChangeLog
Makefile
Makefile.in
aclocal.m4
autom4te.cache

我想要

  • 逐行读取文件
  • 对于读取的每一行,列出被忽略的实际文件
  • 最后我想调整脚本以删除这些文件

想要这样做的原因是我不相信项目 Makefile 可以完全清理它生成的文件。

笔记

如您所见,.gitignore 使用了一些我需要在运行命令之前修改的 glob,否则 glob 将解析为我的根目录。

我已经知道的

将任意字符串动态评估为 glob 模式

DYN="*.c"

打印 $~DYN

去除前导 /,如果它存在

DYN="/*.c"

打印 ${~DYN/#//}

我有什么

猫.gitignore | 读我的时候;做回声 $i ; 打印 ${~i/#//} ; 完毕

问题

此循环遇到的第一个 glob 失败,它以错误终止

zsh: no matches found: *.exe

我想要的是

“脚本”应该继续遍历文件的每一行,依次尝试每一行。

我自己回答了这个,答案在下面

4

1 回答 1

15

以典型的 Zsh 方式在zsh 邮件列表中找到了答案- 当您知道如何操作时,这非常简单,否则就不可能。

print *.nosuchextension(N)

(N) glob 参数可防止在匹配失败时引发错误。

于 2013-09-22T21:54:47.180 回答