gpt4 book ai didi

command-line - zsh 究竟是如何扩展 globs 的?

转载 作者:行者123 更新时间:2023-12-04 14:21:16 25 4
gpt4 key购买 nike

我有一个 C 程序,它通过遍历 argv 来显示它的命令行。多变的。

#include <stdio.h>

int main(int argc, char *argv[]){
int i = 0;
printf("----------\n");
for(i = 0; i < argc; i++)
printf("%s\n", argv[i]);
return 0;
}

我在一个包含大型 C++ 源代码树的文件夹中调用了该程序,如下所示:
./a.out **/*.h

输出:
zsh: argument list too long: ./a.out

但是,像 ls 这样的程序和 grep使用 **/*.h 调用时没有任何问题。 glob 在同一个文件夹中。为什么 zsh调用我的程序时失败?怎么样 zsh去扩展通配符?

编辑:我在 cygwin 上使用 zsh。

最佳答案

您尝试运行的应用程序是 Windows 应用程序(包括 mingw)还是 Cygwin 应用程序?

ARG_MAX定义命令行的长度。通常它是由操作系统设置的,所有应用程序都限于它,但是在 Cygwin 上为 Cygwin 编译的应用程序可以使用比 Windows 应用程序更大的缓冲区 - 参见 this message例如讨论。

如果您不一定需要同时将所有文件作为 args,您可以使用 xargs 将文件名分区为适合 ARG_MAX 的块:

echo **/*.h | xargs ./a.out

关于command-line - zsh 究竟是如何扩展 globs 的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1232302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com