例如:我使用 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)
在这里,如果第一个命令失败,我将无法抑制错误。
有没有办法以这种方式压制
这里有几个是涉及重定向两者STDERR替代品tar和grep:
使用bash命令分组{}:
{ tar -xvf file.tar.bz2 | grep "something" ;} 2>/dev/null
Run Code Online (Sandbox Code Playgroud)使用子外壳():
( tar -xvf file.tar.bz2 | grep "something" ) 2>/dev/null
Run Code Online (Sandbox Code Playgroud)请注意,如果您想重定向单个进程的 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)
管道在命令中形成一个单独的子句,因此重定向...
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)
| 归档时间: |
|
| 查看次数: |
8693 次 |
| 最近记录: |