当我构建 *nix 管道命令时,我发现我想在构建下一阶段之前查看一个阶段的输出以验证正确性,但我不想重新运行每个阶段。有谁知道可以帮助解决这个问题的程序?它将自动保留最后阶段的输出以用于任何新阶段。我通常通过将每个命令的结果发送到一个临时文件(即 tee 或一次运行每个命令)来做到这一点,但如果程序处理这个会很好。
我设想一个类似于选项卡式界面的东西,其中每个选项卡都标有每个管道命令,选择一个选项卡会显示将该命令应用于先前结果的输出(至少一百行)。
使用 '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
如果您需要双向通信(即使用 netcat),也可以使用管道:
mknod backpipe p
nc -l -p 80 0<backpipe | tee -a inflow | nc localhost 81 | tee -a outflow 1>backpipe
(通过)
还有“pv”命令 - 在 debian / ubuntu 存储库中可用,它向您显示管道的吞吐量。
手册页中的示例:从另一个进程传输文件并将预期大小传递给 pv:
cat file | pv -s 12345 | nc -w 1 somewhere.com 3000
tee
(1) 是你的朋友。它将其输入发送到指定的文件和标准输出。
把它粘在你的管道之间。例如:
ls | tee /tmp/out1 | sort | tee /tmp/out2 | sed 's/foo/bar/g'