将错误重定向到一个文件,然后stdout重定向到另一个函数,然后重定向到另一个文件

时间:2018-10-15 09:28:41

标签: linux bash

我已经看到this answer关于使用stdout / stderrcommand 2>x 1>y重定向到不同位置的信息。 但是,我对操纵stdout部分感兴趣:

我要tar -xvzf一个文件,计算输出文件,并将其存储在一个文件中,并将错误存储在另一个文件中。

第一次尝试:

tar -xvzf pkg.tgz 2>err 1>output

文件名本身保存在output中(我没有使用wc -l,但至少它给出了有意义的输出)

第二次尝试:

tar -xvzf pkg.tgz 2>err 1 | wc -l >output
  

tar:1:在存档中找不到

     
    

tar:由于先前的错误而以失败状态退出

  

如果出了什么问题(tar -xvzf通常会解压缩文件并输出错误),如何获取提取的文件数或失败指示?

第三次尝试:

tar -xvzf pkg,tgz 2>err | wc -l > output

各种各样的作品,但我不确定...

我的问题是:我的第三次尝试合法吗?另外,是否有一种选择是重定向仅在文件中包含数据的情况下才创建文件(即如果stderr没有文件,则不会创建任何err文件?)

1 个答案:

答案 0 :(得分:1)

在这种情况下,tee命令可以提供很多帮助。就像是道路或管道上的T型路口。 Tee接收std输入,将其发送到1个或多个文件,然后还输出至std输出,其中可能包含其他过滤器,例如wc

如果要在将内容保存到文件之前进行进一步操作,请在tee之前进行操作。如果只想对文件进行额外的操作,则在bash中,可以使用>(command)代替文件名。