4

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

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

4

4 回答 4

5

使用 '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
于 2008-09-15T15:11:35.797 回答
2

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

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

通过

于 2008-09-15T15:16:31.777 回答
1

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

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

          cat file | pv -s 12345 | nc -w 1 somewhere.com 3000
于 2008-09-15T15:21:10.097 回答
1

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

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

ls | tee /tmp/out1 | sort | tee /tmp/out2 | sed 's/foo/bar/g'
于 2008-09-15T15:13:41.050 回答