微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 解释这个bash重定向行为

我正在尝试重定向和管道,并且不了解某些行为.我有这个片段在每个stderr和stdout上生成一行:

(echo stdout; echo stderr 1>&2)

它似乎工作正常,(尝试> / devnull和2> / dev / null).

但是这三个命令的行为让我困惑:

(echo stdout; echo stderr 1>&2) > >(wc -l)
stderr
1
(echo stdout; echo stderr 1>&2) 2> >(wc -l)
stdout
1
(echo stdout; echo stderr 1>&2) > >(wc -l) 2> >(wc -l)
2
(empty)

为什么最后一个命令组合了两个流?或者还有什么能够打破我的大脑?

解决方法:

因为第二个wc -l从当前命令派生stdout(stdout已经重定向到第一个wc -l),它的输出也传递给第一个wc -l.

 IN   +-----------+   1>    +---------+         OUT
+-+--->echo stdout+----+---->  wc -l  +------------->
  |   +-----------+    ^    +---------+
  |                    |
  |                    |
  |                    +<------------------+
  |                                        |
  |                                        |
  |   +-----------+   2>    +---------+    |
  +--->echo stderr+--------->  wc -l  +----+
      +-----------+         +---------+

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐