如何抑制find与grep组合使用时出现的xargs终止信号13提示?
解决xargs输出"terminated by signal 13"提示的方法
这个提示出现的原因是:head -1获取到第一个匹配结果后就会终止进程,导致管道上游的grep被SIGPIPE信号(信号13)中断,xargs会把这个中断信息输出到标准错误。以下几种方法可以抑制这个提示:
方法一:直接屏蔽xargs的标准错误输出
把xargs和grep的错误输出重定向到/dev/null,命令修改为:find -name "*.jar" | xargs grep -al myText 2>/dev/null | head -1注意:这种方式会同时屏蔽
grep或xargs产生的其他错误(比如文件权限不足、找不到文件等),如果不需要排查其他问题可以用这个方法。方法二:精准过滤特定错误提示
只过滤掉"xargs: grep: terminated by signal 13"这一行错误,保留其他有用的错误信息,命令如下:find -name "*.jar" | xargs grep -al myText 2> >(grep -v "xargs: grep: terminated by signal 13") | head -1这里用了进程替换(
>(...)),将标准错误输出传递给grep -v过滤掉指定行。方法三:替换xargs为find的-exec参数
直接用find的-exec参数执行grep,避免xargs的介入,命令修改为:find -name "*.jar" -exec grep -al myText {} \; | head -1这种方式下,
find会逐个调用grep处理每个jar包,当head -1终止后,后续的grep进程虽然也会收到SIGPIPE,但find不会输出类似的中断提示。
内容的提问来源于stack exchange,提问作者Alexei
相关产品推荐
相关产品推荐

