根据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
为空!为什么?有没有办法使这项工作?
谢谢。
答案 0 :(得分:1)
出于同样的原因,以下输出bar
:
$ foo=bar
$ $(foo=quux)
$ echo $foo
bar
子shell中的赋值(或者在您的情况下是完全独立的进程)不会在父(或完全不相关)shell中进行更改。