1. ホーム

[解決済み】構文強調表示/色付け猫

2022-04-01 17:35:56

質問

の出力をカラー化する方法はありますか? cat と同じように grep のようになります。

については grep ほとんどのコンソールでは、検索されたキーワードを強調する色付きの出力が表示されます。そうでない場合は、強制的に grep --color 個人的な選択に従って、あらゆるプログラムの出力に色をつける一般的な方法はないでしょうか。

私が理解したところでは、プログラム自体が色に責任を持つことはないようです。それはシェルです。

私は FreeBSD 5.2.1 のデフォルトのシェルを使っていますが、それはまるでエポック以来一度も色を見ていないかのようです。

解決方法は?

cat をシンタックスハイライトで表示することは、単に範囲外です。 cat はそのためのものではありません。 もし、あるファイルの内容全体に何らかの色をつけたい(ファイル全体が同じ色になるように)だけなら、ターミナルのエスケープシーケンスを利用して色を制御することができます。

以下は、ファイルの種類に応じて色を選択するスクリプトのサンプルです。 cat を直接入力します)。

#!/bin/bash
fileType="$(file "$1" | grep -o 'text')"
if [ "$fileType" == 'text' ]; then
    echo -en "\033[1m"
else
    echo -en "\033[31m"
fi
cat $1
echo -en "\033[0m"

上記は(これらのエスケープシーケンスをサポートするターミナル上で、)どんなテキストファイルでも「太字」で表示し、どんなバイナリファイルでも「赤」で表示します。また strings の代わりに cat を使えば、バイナリファイルを印刷することができ、そのロジックを拡張することができます。