我有三个文件,名为一、二、三。
一个包含:
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 的输入?
您的命令与以下命令相同:
sort 0<1 0<2 0<3
(文件描述符 0 是标准输入)
重定向按照它们出现的顺序进行处理,从左到右。
sort
命令本身看不到任何这些文件。一个一个
bash
打开文件1
,,,2
。
所以最右边的覆盖左边的。
最后,读取绑定到文件的文件。3
file descriptor 0
sort
file descriptor 0
3
您不能使用 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