Unix管道命令的调试器

时间:2020-03-05 18:53:41  来源:igfitidea点击:

当我构建* 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

回答

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

将其粘在管道之间。例如:

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

回答

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

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

(通过)

回答

在debian / ubuntu repostitories中也有可用的" pv"命令,它向我们显示管道的吞吐量。

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

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