重定向多个stdins?

时间:2012-09-11 13:50:59

标签: bash sorting redirect input stdin

我有三个名为One,Two,Three的文件。

一个包含:

1
3
2

两个包含:

4
6
5

三个包含:

7
9
8

当我发出以下命令时:

$sort < One < Two < Three

我得到了输出:

7
8
9

但是当我发出以下命令时:

$sort One Two Three

我得到了输出:

1
2
3
4
5
6
7
8
9

任何人都可以了解这里发生的事情吗?为什么在第一个命令中没有考虑1和2的输入?

2 个答案:

答案 0 :(得分:4)

您的命令与:

相同
sort 0<1 0<2 0<3

(文件描述符0是标准输入)

重定向按其出现的顺序从左到右处理 sort命令本身无法看到任何这些文件 bash1逐个打开文件23file descriptor 0
所以最右边的一个覆盖左边的 最后,sortfile descriptor 0读取,该文件绑定到文件3

答案 1 :(得分:2)

您无法使用bash重定向多个文件。要解决此限制,您可以使用cat:

cat 1 2 3 | sort

另外,zsh支持它所谓的mutlios:

 zsh$ setopt multios
 zsh$ sort < 1 < 2 < 3 > 4 > 5
 zsh$ tr '\n' ' ' < 4 < 5
 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9