$ 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$