我可以使用输出流,用tee复制它,将它们中的一个复制,并将两个管道输回到diff中作为输入吗?

时间:2013-05-31 23:29:02

标签: shell unix io pipe tee

例如,取一个程序的stdout,用tee获取它的两个副本并将它们(一个或最好都能通过其他程序传送)发送回vimdiff

如果可以在不必在磁盘上创建文件的情况下完成加分。

我知道如何将输入定向到一个带有两个输入的程序,比如

vimdiff <(curl http://google.com) <(curl http://archives.com/last_night/google.com)

并使用tee制作两个输出流

echo "abc" | tee >(sed 's/a/zzz/') >(sed 's/c/zzz/')

但我不知道如何将管道连接成菱形。

2 个答案:

答案 0 :(得分:1)

如果你能使用fifo,那就不那么难了:

test -e fifo || mkfifo fifo
echo abc | tee >(sed s/a/zzz/ > fifo) | sed s/c/zzz/ | diff - fifo

答案 1 :(得分:0)

作为旁注,在ZSH下进行这项工作是额外的&#34;&gt;&#34;在tee之后需要(应该设置multios选项):

$ setopt multios
$ test -e fifo || mkfifo fifo
$ echo abc | tee > >(sed s/a/zzz/ > fifo) | sed s/c/zzz/ | diff - fifo