dmesgをlessするときに色を保持する

October 26, 2020

dmesgの標準出力をlessにパイプした際に、色が表示されなくて目grepが大変だったので調べた。 結論としては以下で解決。

dmesg --color=always | less -R

https://wiki.archlinux.jp/index.php/コンソールのカラー出力

コマンドを実行してページ表示するために標準出力 (stdout) を less にパイプする場合 (例: pacman -Qe | less)、出力がカラー化されないことに気づくかもしれません。stdout がインタラクティブターミナルであるかどうかを判別して、その場合はカラーのテキストを出力して、そうでない場合はカラーでないテキストを出力するようになっているのが原因です。

このため、インタラクティブ tty の検出を無効化するオプションが用意されており、--color=alwaysを指定することで解決する。

また、lessは -R または --RAW_CONTROL_CHARS オプションによってANSIカラーエスケープを表示できるようになる。(設定しないとESC[..]のようなエスケープシーケンスがそのまま表示される。)

というようにパイプして使っていたのだが、dmesgには上記を行うためのオプションが用意されていて、-Hまたは--human で同じ挙動になるのだった。

dmesg -H

© 2020-2024 ntsk.