一次命令管理多个程序的STDOUT(bash)

时间:2014-07-28 18:08:00

标签: bash pipe process-substitution

根据bash中的process substitution,可以使用以下模板将一个命令的stdout一次性传送到多个程序中:

echo 'foobar' | tee >(command1) >(command2) | command3

所以,你可以这样做:

echo "the fox jumped over the lazy dog" | tee >(grep fox) >(grep jumped)

获取所有三个命令的输出。

现在我尝试存储所有这些命令的输出,但没有成功:

echo "the fox jumped over the lazy dog" | tee >(n1=$(grep fox)) >(n2=$(grep jumped))
echo $n1, $n2

您会看到$n1$n2为空!为什么?有没有办法使这项工作?

谢谢。

1 个答案:

答案 0 :(得分:1)

出于同样的原因,以下输出bar

$ foo=bar
$ $(foo=quux)
$ echo $foo
bar

子shell中的赋值(或者在您的情况下是完全独立的进程)不会在父(或完全不相关)shell中进行更改。