小编Abh*_*P G的帖子

管道和输入流重定向到同一命令,命令采用哪个输入?

我试图运行下面给出的命令

cat numbers.txt | sort < words.txt
Run Code Online (Sandbox Code Playgroud)

上面的命令有一个从 cat 命令馈送到 sort 命令输入流的管道。但同时,sort命令的输入流也被重定向到words.txt文件。运行命令时,我发现words.txt 中的数据已按排序命令排序并显示回终端中。

我不明白在这种情况下外壳程序如何处理管道和重定向。一个命令是否可以接受来自两个不同源的输入流。我对其内部工作方式的想法是,由于重定向和管道是沿着命令从左到右处理的,因此首先将 cat 命令的输出流作为 sort 命令的输入流。但由于排序命令在该管道之后提供了另一个输入流重定向,因此排序命令的输入流将连接到words.txt。因此,当命令执行时,words.txt 中的数据只会到达排序命令。

另外为什么以下命令不运行。我已经通过覆盖更改了重定向,通过附加重定向。

cat numbers.txt | sort << words.txt
Run Code Online (Sandbox Code Playgroud)

有一个与此部分类似的问题,但我无法完全理解外壳程序如何处理管道和重定向。

bash pipe io-redirection

3
推荐指数
1
解决办法
458
查看次数

标签 统计

bash ×1

io-redirection ×1

pipe ×1