【问题标题】:Debugger for unix pipe commands用于 unix 管道命令的调试器
【发布时间】:2010-09-08 23:47:20
【问题描述】:

当我构建 *nix 管道命令时,我发现我想在构建下一阶段之前查看一个阶段的输出以验证正确性,但我不想重新运行每个阶段。有谁知道可以帮助解决这个问题的程序?它将自动保留最后阶段的输出以用于任何新阶段。我通常通过将每个命令的结果发送到一个临时文件来做到这一点(即 tee 或一次运行每个命令),但如果程序处理这个会很好。

我设想类似一个选项卡式界面,其中每个选项卡都标有每个管道命令,选择一个选项卡会显示将该命令应用于前一个结果的输出(至少一百行)。

【问题讨论】:

  • tee 要求我做这个程序应该自动做的手动工作。

标签: shell terminal


【解决方案1】:

使用 'tee' 将中间结果复制到某个文件中,并将它们传递到管道的下一个阶段,如下所示:

cat /var/log/syslog | tee /tmp/syslog.out | grep something | tee /tmp/grep.out | sed 's/foo/bar/g' | tee /tmp/sed.out | cat >>/var/log/syslog.cleaned

【讨论】:

    【解决方案2】:

    如果您需要双向通信(即使用 netcat),也可以使用管道:

    mknod backpipe p
    nc -l -p 80 0<backpipe | tee -a inflow | nc localhost 81 | tee -a outflow 1>backpipe
    

    (via)

    【讨论】:

      【解决方案3】:

      还有“pv”命令 - 在 debian / ubuntu 存储库中可用,它可以显示管道的吞吐量。

      手册页中的一个示例: 从另一个进程传输文件并将预期大小传递给 pv:

                cat file | pv -s 12345 | nc -w 1 somewhere.com 3000
      

      【讨论】:

        【解决方案4】:

        tee(1) 是你的朋友。它将其输入发送到指定的文件和标准输出。

        把它粘在你的管道之间。例如:

        ls | tee /tmp/out1 | sort | tee /tmp/out2 | sed 's/foo/bar/g'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-01-28
          • 1970-01-01
          • 1970-01-01
          • 2015-04-22
          • 1970-01-01
          • 1970-01-01
          • 2018-02-28
          • 1970-01-01
          相关资源
          最近更新 更多