我有三个名为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的输入?
答案 0 :(得分:4)
您的命令与:
相同sort 0<1 0<2 0<3
(文件描述符0是标准输入)
重定向按其出现的顺序从左到右处理
sort
命令本身无法看到任何这些文件
bash
在1
逐个打开文件2
,3
,file descriptor 0
。
所以最右边的一个覆盖左边的
最后,sort
从file 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