makefile上的扩展glob表达式
考虑以下命令在zsh中创建的文件结构makefile上的扩展glob表达式,makefile,zsh,gnu-make,glob,Makefile,Zsh,Gnu Make,Glob,考虑以下命令在zsh中创建的文件结构 mkdir fff fff/a fff/b touch fff/{a,a/a,b/a,}.{x,y,z} 我想对“fff”的所有子目录中没有“z”扩展名的所有文件进行全局搜索。所以 ls fff/**/^*.z(.) 假设设置了extended\u glob选项,则在交互式shell中执行此操作。但是,当我在这样的makefile中使用上面的cl时 SHELL=/bin/zsh list_not_z : ls fff/**/^*.z(.) 它不
mkdir fff fff/a fff/b
touch fff/{a,a/a,b/a,}.{x,y,z}
我想对“fff”的所有子目录中没有“z”扩展名的所有文件进行全局搜索。所以
ls fff/**/^*.z(.)
假设设置了extended\u glob
选项,则在交互式shell中执行此操作。但是,当我在这样的makefile中使用上面的cl时
SHELL=/bin/zsh
list_not_z :
ls fff/**/^*.z(.)
它不进行任何操作并报告错误:
ls fff/**/^*.z(.)
zsh:1:未找到匹配项:fff/**/^*.z(.)
另一方面,使用ls fff/***.z(.)
对所有具有“z”扩展名的文件进行全局化处理,既可以在makefile中进行交互,也可以在makefile中进行交互。因此,我怀疑这与^
属于zsh的扩展glob语法这一事实有关。my.zshrc中设置了相应的选项extended_glob
为什么glob在交互式shell中能像预期的那样工作,但在GNU make作为makefile配方的一部分执行时却不能工作?
make
没有为它用来执行配方的非交互式shell提供.zshrc
文件,因此没有设置扩展的\u glob
最简单的方法是显式运行zsh
,将extended_glob
选项作为命令行参数传递。q
list_not_z:
zsh -o extended_glob -c 'ls fff/**/^*.z(.)'
“假设已设置扩展_glob选项”
make
使用的是非交互式shell,.zshrc
文件未在此处来源。