我经常使用Makefile来自动执行我反复执行的任务。例如,一项任务涉及在不断增长的数据集中搜索正则表达式匹配。假设我有以下两个文本文件search1.txt
和search2.txt
:
search1.txt
:
DSADJKBSDJSA
TEST1
DJKSABVDJSA
search2.txt
:
hvdsjhavdjshavdsa
dsadsadsadsa
TEST3djsabdjhsavdjhsa
TEST2dsajdbsahjdvsa
这是我的Makefile,使用GNU parallel并行搜索这些。
.PHONY: search
search:
find search*.txt | parallel grep TEST1 {}
find search*.txt | parallel grep TEST2 {}
当我运行make search
时,第一行输出正确的数据,然后抛出错误并退出,尽管自己运行这两行完全没问题。
> make search
find *.txt | parallel grep TEST1 {}
TEST1
make: *** [search] Error 1
> find *.txt | parallel grep TEST1 {}
TEST1
> find *.txt | parallel grep TEST2 {}
TEST2dsajdbsahjdvsa
> parallel --version
GNU parallel 20160822
我不能为我的生活弄清楚我做错了什么。它必须是显而易见的东西,但我把它简化为一个简单的小例子,我仍然对为什么会发生这种情况感到困惑。谢谢你的帮助!
答案 0 :(得分:1)
EXIT STATUS
The grep utility exits with one of the following values:
0 One or more lines were selected.
1 No lines were selected.
>1 An error occurred.
由于我搜索的某些文件不包含匹配项,因此grep将返回退出状态1.这有一个非常简单的修复:
.PHONY: search
search:
find search*.txt | parallel grep TEST1 {} || true
find search*.txt | parallel grep TEST2 {} || true