Могу ли я взять выходной поток, продублировать его с тройником, выполнить один из них и передать ОБА обратно в качестве ввода в diff?

Например, взяв стандартный вывод одной программы, получив две копии с tee и отправив их обоих (одну или предпочтительно обе с возможностью передачи через другие программы) обратно в vimdiff,

Бонусные баллы, если это можно сделать без необходимости создания файла на диске.

Я знаю, как направить ввод в программу, которая принимает два входа, как это

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

и с тройником для создания двух выходных потоков

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

но я не знаю, как соединить трубы обратно в ромбовидную форму.

2 ответа

Решение

Это не так сложно, если вы можете использовать fifo:

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

В качестве дополнительного примечания, чтобы эта работа работала под ZSH, после "тройника" требуется дополнительный ">" (должна быть установлена ​​опция multios):

$ setopt multios
$ test -e fifo || mkfifo fifo
$ echo abc | tee > >(sed s/a/zzz/ > fifo) | sed s/c/zzz/ | diff - fifo
Другие вопросы по тегам