/bin/ls 的排序与 ls 不同

/bin/ls 的排序与 ls 不同
$ ls |sort
xyz-0.0.1-1554490900.rpm
xyz-0.0.1-1554745305.rpm
xyz-0.0.1-1554751021.rpm
xyz-0.0.1-1555513460.rpm
xyz-0.0.1-1555951745.rpm
xyz-0.0.1-1554323568.rpm

$ /bin/ls |sort
xyz-0.0.1-1554323568.rpm
xyz-0.0.1-1554490900.rpm
xyz-0.0.1-1554745305.rpm
xyz-0.0.1-1554751021.rpm
xyz-0.0.1-1555513460.rpm
xyz-0.0.1-1555951745.rpm

$ which ls
alias ls='/bin/ls --color'
        /bin/ls

请注意,两个命令之间的排序不同(ls |sort导致排序不正确)。这一定是由于颜色标志,但为什么呢?

答案1

做:

/bin/ls --color > file1
/bin/ls > file2

并比较内容,您就会看到差异。

别名ls可能是更好的想法,当不直接写入终端时(例如当通过管道传输到下一个程序或写入文件时),/bin/ls --color=auto它将停止使用颜色代码。ls

答案2

在排序后的彩色输出中ls|sort,我们可以看到最后一行xyz-0.0.1-1554323568.rpm是非彩色输出的第一行。其他行按相同顺序排序。

如果我们看一下彩色转义码(未排序),我们可以看到第一行以不同的转义码开头。这导致排序时(之前)^[[0m顺序错误。^[[01^[[0m

$ /bin/ls --color xyz* | cat -A
^[[0m^[[01;31mxyz-0.0.1-1554323568.rpm^[[0m$
^[[01;31mxyz-0.0.1-1554490900.rpm^[[0m$
^[[01;31mxyz-0.0.1-1554745305.rpm^[[0m$
^[[01;31mxyz-0.0.1-1554751021.rpm^[[0m$
^[[01;31mxyz-0.0.1-1555513460.rpm^[[0m$
^[[01;31mxyz-0.0.1-1555951745.rpm^[[0m$

相关内容