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

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

    [复制链接]

    签到天数: 178 天

    [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

    签到天数: 178 天

    [LV.7]化身百千

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

    6666            
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

    返回顶部