Могу ли я взять выходной поток, продублировать его с тройником, выполнить один из них и передать ОБА обратно в качестве ввода в 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