make: execvp: /bin/sh: 参数列表过长 make: *** [Makefile:310:failures.txt] 错误 127
时间: 2023-07-05 21:03:57 浏览: 154
这个错误通常是由于命令行过长而导致的。可以尝试使用更短的命令行或者将命令拆分成多个部分执行。另外,也可以尝试增加系统参数"ARG_MAX"的大小限制,以便支持更长的命令行。可以通过以下命令查看当前系统的ARG_MAX值:
```
$ getconf ARG_MAX
```
如果ARG_MAX值较小,可以通过以下命令来增加它的大小:
```
$ sudo sysctl -w kern.argmax=204800
```
其中,204800是新的ARG_MAX值。请注意,修改ARG_MAX值可能会对系统性能产生影响,应该谨慎操作。
相关问题
TEST_RESULTS := ./result/* failures.txt: $(TEST_RESULTS) @rm -f $@ @for file in $^; do \ if grep -q 'This case is failed' $$file; then \ echo "Processing $$file..."; \ grep '{.*}' $$file >> failures.txt; \ fi; \ done执行这个命令的时候,提示make: execvp: /bin/sh: 参数列表过长 make: *** [Makefile:310:failures.txt] 错误 127怎么解决
这个错误通常是因为参数列表过长导致的。可以尝试将命令改为:
```
find ./result -type f -name '*.txt' -exec grep -q 'This case is failed' {} \; -print0 | xargs -0 grep '{.*}' > failures.txt
```
这个命令使用了 `find` 和 `xargs`,可以避免参数列表过长的问题。它会在 `./result` 目录中找到所有以 `.txt` 结尾的文件,然后使用 `grep` 检查文件内容是否包含 `This case is failed`,如果包含则将文件名通过管道传递给 `xargs`,最终将所有匹配到的行写入到 `failures.txt` 文件中。
TEST_RESULTS := ./result/* failures.txt: $(TEST_RESULTS) @rm -f $@ @for file in $^; do \ if grep -q 'This case is failed' $$file; then \ echo "Processing $$file..."; \ grep '{.*}' $$file >> failures.txt; \ fi; \ done执行这个命令的时候,提示make: execvp: /bin/sh: 参数列表过长 make: *** [Makefile:310:failures.txt] 错误 127怎么解决,请给出完整的命令更改
可以使用 xargs 命令来避免参数列表过长的问题,将命令改为如下:
```
TEST_RESULTS := ./result/*
failures.txt: $(TEST_RESULTS)
@rm -f $@
@echo "Processing test results..."
@grep -h '{.*}' $(TEST_RESULTS) | xargs -I {} sh -c 'if echo {} | grep -q "This case is failed"; then echo {} >> failures.txt; fi;'
```
这里使用 xargs 命令将多个文件的内容合并到一起,然后再使用 grep 进行筛选。注意,这里使用了 -h 参数来隐藏文件名,并使用 -I 参数指定占位符为 {},然后在 sh 命令中使用 if 条件语句来判断是否是失败的测试用例,如果是则将结果写入到 failures.txt 文件中。
阅读全文