请选择 进入手机版 | 继续访问电脑版
查看: 130|回复: 2

[经验分享] 基于pee可以代替tee的讲解

[复制链接]

签到天数: 133 天

[LV.7]化身百千

发表于 2018-10-8 17:20:21 | 显示全部楼层 |阅读模式
pee是moreutils包中的一个小工具,先安装它(epel源中有):

yum -y install moreutils
在man pee中,pee的作用是将标准输入tee给管道。语法:

pee ["cmds"]
不是很好理解,可以通过几个示例直接感受它的用法。

$ cat alpha.txt | pee 'grep -E "a|b"' 'grep -E "d|b|c"'
a
b
b
c
d
所以,它的基本用法是pee "CMD1" "CMD2"。

如果想将结果保存到文件,只需加一个命令即可,例如下面的cat >myfile。

$ cat alpha.txt | pee 'grep -E "a|b"' 'grep -E "d|b|c"' 'cat >myfile'
和tee有同样的问题,如果各命令都没有指定自己的标准输出重定向,它们将各自打开一个属于自己的/dev/stdout,同样会有多个/dev/stdout同时输出时结果数据顺序随机性的问题,但是不会有多个/dev/stdout同时输出时交互式的隔断性问题,因为pee会收集各个命令的标准输出,然后将收集的结果作为自己的标准输出。

pee和tee最大的不同,在于pee将来自多个不同命令的结果作为pee自己的标准输出,所以下面的命令是可以像普通命令一样进行重定向的。

INPUT | pee CMD1 CMD2 >/FILE
而tee则不同,是将cmd1和cmd2的结果放进标准输出(假设各命令自身没有使用重定向),保存到FILE中的是tee读取的标准输入。

INPUT | tee >(cmd1) >(cmd2) >/FILE
所以,想要重定向tee中cmd1和cmd2的总结果,必须使用额外的管道,或者将整个tee放进子shell。

INPUT | tee >(cmd1) >(cmd2) >/dev/null | cat >FILE1
INPUT | ( tee >(cmd1) >(cmd2) >/dev/null ) >/FILE1

签到天数: 133 天

[LV.7]化身百千

 楼主| 发表于 2018-10-9 08:35:01 | 显示全部楼层

6666            
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

返回顶部