管道多次输出到同一命令

时间:2019-12-12 13:49:56

标签: bash

bash中,是否有一种 direct 方法将一个命令的输出传递到另一个有多种用法的命令?在某些情况下,我将能够使用xargs和替换字符串,但是假设我需要第二条命令来处理整个管道输出,例如由于有多种处理输出的方式。

例如(并且这是一个故意的示例),假设command1产生输出,而我想在包含{{ 1}}与包含diff的内容相对应。

我可以写:

a

是否有更直接的方法来处理b中的管道?

1 个答案:

答案 0 :(得分:0)

您可以使用临时fifo和tee。

command1() { printf "%s\n" "a 1" "b 2" "c 3"; }
fifo=$(mktemp -u)
mkfifo "$fifo"
trap 'exit 0 ; rm "$fifo"' EXIT
command1 |
tee >(grep a >"$fifo") |
grep b |
diff "$fifo" -

我相信您可以使用bash coproc,但我无法使其正常工作。

相关问题