管道时如何抑制 tar 错误消息

Ram*_*ddy 6 command-line tar

例如:我使用 tar -xvf 而不是 tar -xjvf 提取 tar.bz2 文件:

 tar -xvf file.tar.bz2
 tar: invalid tar magic
Run Code Online (Sandbox Code Playgroud)

如果重定向标准错误

 tar -xvf file.tar.bz2 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

有用。

现在如果我使用管道

 tar -xvf file.tar.bz2 | grep "something" 2>/dev/null 
 tar: invalid tar magic
Run Code Online (Sandbox Code Playgroud)

在这里,如果第一个命令失败,我将无法抑制错误。

有没有办法以这种方式压制

hee*_*ayl 8

这里有几个是涉及重定向两者STDERR替代品targrep

请注意,如果您想重定向单个进程的 STDERR,最好改用Oli 的答案

另一方面,如果您想对使用grep的 STDOUT 和 STDERR 有所了解tar

tar -xvf file.tar.bz2 |& grep "something"
Run Code Online (Sandbox Code Playgroud)

这也会导致STDERR的tar耗尽。

这实际上是 的简写:

tar -xvf file.tar.bz2 2>&1 | grep "something"
Run Code Online (Sandbox Code Playgroud)


Oli*_*Oli 6

管道在命令中形成一个单独的子句,因此重定向...

tar -xvf file.tar.bz2 | grep "something" 2>/dev/null 
Run Code Online (Sandbox Code Playgroud)

...正在从 重定向 STDERR grep,而不是tar

要修复,只需重新排序内容,以便您的重定向与您的tar命令一起使用:

tar -xvf file.tar.bz2 2>/dev/null | grep "something"
Run Code Online (Sandbox Code Playgroud)