【问题标题】:bash output redirect probbash 输出重定向问题
【发布时间】:2011-07-10 21:33:28
【问题描述】:

我想计算 bash 脚本中命令输出的行数。即

COUNT=ls | wc -l

但我还希望脚本从ls 输出原始输出。如何完成这项工作? (我的实际命令不是ls,它有副作用,所以不能运行两次。)

【问题讨论】:

    标签: bash output-redirect


    【解决方案1】:

    tee(1) 实用程序可能会有所帮助:

    $ ls | tee /dev/tty | wc -l
    CHANGES
    qpi.doc
    qpi.lib
    qpi.s
    4
    

    info coreutils "tee invocation" 包含以下示例,这可能更能说明tee(1) 的力量:

     wget -O - http://example.com/dvd.iso \
       | tee >(sha1sum > dvd.sha1) \
             >(md5sum > dvd.md5) \
       > dvd.iso
    

    下载文件一次,通过两个子进程发送输出(通过bash(1) 进程替换启动)以及tee(1) 的标准输出,它被重定向到一个文件。

    【讨论】:

    • 这是一种将行数放入变量而不是将其添加到输出中的变体:COUNT=$(ls -l | tee /dev/tty | wc -l)
    • @Gordon Davisson,谢谢,这对@nakiya 想要的东西更有用。 :)
    • 技术上,这是 Bash 的进程替换。
    【解决方案2】:
    ls | tee tmpfile | first command
    cat tmpfile | second command
    

    【讨论】:

      【解决方案3】:

      Tee 是一个很好的方法,但你可以做一些更简单的事情:

      ls > __tmpfile
      
      cat __tmpfile | wc -l
      cat __tmpfile
      
      rm __tmpfile
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多