首页 > 解决方案 > 在 bash 中重定向管道输出

问题描述

在 bash 中运行此命令

echo hello | > ./out

文件./out为空,没有打印任何内容。

所以我想知道,这里到底发生了什么?我希望这是一个错误。

谢谢, 福斯

标签: bash

解决方案


这相当于:

echo | true

总而言之,管道输出连接到一个子shell,但由于重定向运算符>是第一个由shell执行的,并且由于该子shell没有初始输入,因此您将得到一个空的a.out。

甚至echo xxx | > a.out会给你一个空的 a.out 文件。

更清楚地说,> a.out在管道的右侧意味着一个子壳。在处理任何管道输入之前,此子 shell 将首先执行重定向运算符。

因此,您的问题的标题是错误的,您没有使用此命令在此处重定向任何管道输出。您只是重定向在管道右侧调用的子外壳的输出。


推荐阅读