$ 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
2つのコマンド(ls |sort
の場合、並べ替えが正しく行われません)。これはカラーフラグによるものですが、なぜですか?
行う:
/bin/ls --color > file1
/bin/ls > file2
コンテンツを比較すると、違いがわかります。
ls
から/bin/ls --color=auto
へのエイリアスは、おそらく良いアイデアです。ターミナルに直接書き込まない場合(次のプログラムにパイプする場合やファイルに書き込む場合など)、ls
がカラーコードを使用するのを停止します。 。
ソートされた色付き出力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$