web-dev-qa-db-ja.com

/ 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

2つのコマンド(ls |sortの場合、並べ替えが正しく行われません)。これはカラーフラグによるものですが、なぜですか?

20
Josh M.

行う:

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

コンテンツを比較すると、違いがわかります。

lsから/bin/ls --color=autoへのエイリアスは、おそらく良いアイデアです。ターミナルに直接書き込まない場合(次のプログラムにパイプする場合やファイルに書き込む場合など)、lsがカラーコードを使用するのを停止します。 。

24
Tomek

ソートされた色付き出力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$
25
Freddy