percol タグの一覧です(1 件)

[less][percol]色付きlsをlessにパイプした時の文字化けの対応(ついでにpercolも)

タイトルで文字化けと書きましたが、正確には文字化けではなく、ターミナル上でカラー表示させる為の ANSI escape sequence が実際の色に変換されずに文字列そのものが表示されてしまうことです。

同じような現象の方がググってここにたどり着きやすくする為、便宜的にこの言葉を使いました。

例えば、ls --color や ls --color=always をless にパイプした時、次のようになります。

ESC[0mESC[34mdevESC[0m
ESC[34mdotfilesESC[0m
ESC[34mlocalESC[0m
ESC[34mpitfilesESC[0m
ESC[34mtmpESC[0m
ESC[34mダウンロードESC[0m
ESC[34mテンプレートESC[0m
ESC[34mデスクトップESC[0m
ESC[34mドキュメントESC[0m
ESC[34mビデオESC[0m
ESC[34mピクチャESC[0m
ESC[34mミュージックESC[0m
ESC[34m公開ESC[0m
(END)
これはデフォルト設定のlessが ANSI escape sequence を色として表示してくれないからです。

この現象を回避するいくつか方法の内、カラー表示させたい場合は

$ls --color | less -R
カラーじゃなくても ANSI escape sequence が表示されなければよいよ、という場合は
$ls --color=auto | less
sedを駆使したテクニック!
$ls --color | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" | less

percolにパイプする場合はlessでいうところのRオプションがなさそうなので、カラー表示は出来なさそう。なので less --color=autoにするか、 作者様も言っているように sedでクリーニングするかでしょうか。

確認した環境

$uname -a
Linux ubuntu1404 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

$less -V
less 458 (GNU regular expressions)

参照サイト


PAGE TOP