问个 `tee` 以及 `/dev/console` 的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SoloCompany
V2EX    Bash

问个 `tee` 以及 `/dev/console` 的问题

  •  1
     
  •   SoloCompany 2016-06-24 23:09:19 +08:00 3115 次点击
    这是一个创建于 3416 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不想遛狗或者 SO 了,当一回伸手党吧

    原来是希望能让一个输出两次, tee 比较适合做这个 比如

    echo 1 | tee /dev/stdout 1 1 

    然后希望能够 pipe 下去,初看很美好

    echo 1 | tee /dev/stdout | cat 1 1 

    但后来发现,实际被 pipeline 的不是一个输出,而是两个输出同时被 pipline ,比如

    echo 1 | tee /dev/stdout | tr 1 2 2 2 

    我希望能输出 1 和 2

    然后我试了下用 /dev/console,结果失败了

    echo 1 > /dev/console Σ<(っ =°Д °)っ 啥也没输出 

    看来是没戏了

    谁能告诉我 /dev/console 或者 tee 的正确使用姿势? 或者这类需求有什么其它更好的简单解决方案

    11 条回复    2016-06-25 10:41:07 +08:00
    fcicq
        1
    fcicq  
       2016-06-24 23:13:27 +08:00
    第一问 sed 'p' 或者 sed -n 'p;p'
    后面 tr 肯定也能用 sed 实现.
    SoloCompany
        2
    SoloCompany  
    OP
       2016-06-24 23:15:32 +08:00
    @fcicq 我知道 sed 可以实现啊,但我只是举个栗子,我真是的需求是希望 pipeline 中途可以旁路输出内容(但不是写到文件里面,我知道 tee 可以干这个),然后同时继续后面的 pipeline
    jybox
        3
    jybox  
       2016-06-24 23:16:15 +08:00
    /dev/stdout 是对于「当前程序」而言的(而不是当前 Shell ),在你的第三段代码里,是 tee 在往 stdout 写数据,所以数据是被写到 tee 的标准输出的,所以会被 pipe 到 tr.
    fcicq
        4
    fcicq  
       2016-06-24 23:16:27 +08:00
    @SoloCompany 那可能只能 mkfifo 然后组装了.
    SoloCompany
        5
    SoloCompany  
    OP
       2016-06-24 23:18:55 +08:00
    @fcicq 就是觉得很复杂想看看有没有简单解决方案,因为 tee 写到临时文件也是可以解决的,而且应该比 mkfifo 要简单一些
    SoloCompany
        6
    SoloCompany  
    OP
       2016-06-24 23:21:59 +08:00
    可能我这个本身就是不合理需求吧
    pipeline 旁路应该是不能使用同一个管道的
    即使可以的话,多个管道进程输出可能也会导致输出的内容发生交叉
    也许只能有临时文件一种途径了
    billlee
        7
    billlee  
       2016-06-24 23:36:07 +08:00   1
    Process Substitution:
    echo 1 | tee >(tr 1 2)
    SoloCompany
        8
    SoloCompany  
    OP
       2016-06-24 23:39:04 +08:00
    @billlee 蟹蟹!!
    rrfeng
        9
    rrfeng  
       2016-06-25 01:50:12 +08:00

    $ echo 1 | tee /dev/stderr | tr 1 2
    1
    2
    rrfeng
        10
    rrfeng  
       2016-06-25 01:51:57 +08:00
    $ echo 1 | tee /dev/stderr | tr 1 2 2>&1
    SoloCompany
        11
    SoloCompany  
    OP
       2016-06-25 10:41:07 +08:00 via iPhone
    @rrfeng 你这是取巧,而且 pipeline 不能继续往下传递了,前面的答案才是正解,不过还是蟹蟹
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2630 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 108ms UTC 09:12 PVG 17:12 LAX 02:12 JFK 05:12
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86