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