zsh在glob失败中存活

时间:2013-09-21 10:20:56

标签: error-handling zsh gitignore glob

我检查了一个项目,该项目包含一个.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 /#//}

我得到了什么

cat .gitignore |读我的时候;回声$ i; print $ {~i /#//};完成

问题

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

zsh: no matches found: *.exe

我想要什么

'脚本'应该继续浏览文件的每一行,依次尝试每一行。

我自己回答,答案在下面

1 个答案:

答案 0 :(得分:11)

以典型的Zsh方式在zsh mailing list找到答案 - 当你知道如何以及其他方式时,这很简单。

print *.nosuchextension(N)

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