【问题标题】:zsh survive glob failurezsh 在全局故障中幸存下来
【发布时间】:2013-09-21 10:20:56
【问题描述】:

我签出了一个项目,该项目包含一个.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

我想要什么

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

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

【问题讨论】:

  • 我知道,但那些脾气暴躁的人不会让我在 8 小时内发布解决方案 - 不会坐在那里等待!

标签: error-handling zsh gitignore glob


【解决方案1】:

zsh mailing list 上以典型的 Zsh 方式找到了答案 - 当您知道如何操作时,它非常简单,否则不可能。

print *.nosuchextension(N)

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

【讨论】:

  • 只是一个评论说“谢谢!”还有更多。您发布的 ZSH 邮件列表的链接提供了解释 (N) 的参考链接。这意味着为当前模式设置 NULL_GLOB 选项。想指出这在某些情况下会产生负面影响,例如,gawk -f script *.csv(N) 会导致脚本无限期地等待交互式输入。
猜你喜欢
  • 2020-08-24
  • 2021-11-06
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 2021-10-21
  • 2015-04-27
  • 2015-12-17
相关资源
最近更新 更多