シェル出力のコマンドと引数の色付け

シェル出力のコマンドと引数の色付け

make / cmakeスクリプトを使用するときは、通常VERBOSE = 1を使用し、すべてのコマンドが実行されることを確認する必要があります。これは私がよくすることであり、命令のソースを探している人には完全にストレスを与えます。

私たちはしばしば30行のラップされたパラメータを持ち、コマンドのソースは難読化されています。

一般的なコマンドを際立たせるために色を指定できますか?私は彼らが彼らの主張を避けるようにしなければなりません。それがすべてです。

bash、zsh、またはこの機能をサポートするすべてのシェルを使用できます。これが一般的に可能かどうかを知りたいです。

答え1

私は「警告」と「エラー」という単語に色を付けるのが好きなので、シェル起動ファイルでこれを行います。

make(){
    local subst
    subst+="s/error/\x1b[1;31m&\x1b[0m/g; "
    subst+="s/warning/\x1b[1;33m&\x1b[0m/g; "
    subst+="s/undefined reference/\x1b[1;35m&\x1b[0m/g; "
    # For debugging
    # echo "subst = '$subst'"
    (
        set -o pipefail
        CLICOLOR_FORCE=yes_please command make "$@" 2>&1 | sed --unbuffered "${subst}"
    )
}

errormy、warningおよび代わりに正しい正規表現を使用すると、進行undefined reference中の出力がかなり強調表示されることがあります。

以下はいくつかの詳細です。

  • 理解していないため、\x1binを使用する必要があります。sed\033

  • &行の一致する部分に展開されます。

  • --unbufferedこれは必須です。それ以外の場合、make コマンド全体が完了すると、出力は大きなチャンクとして表示されるか、単一チャンクとして表示されます。

  • commandmakeシェル関数への再帰呼び出しを避けてください。

  • "@"シェル関数に与えられた引数をmakeに渡します。これにはその他の項目がcommand make含まれます。VERBOSE=1

  • CLICOLOR_FORCECMakeによって生成されたMakefileからカラー出力を取得することです。出力がTTY(パイプなど)でない場合、通常はオフになります。

  • set -o pipefailパイプは通常、パイプの最後のコマンドの戻りコードを取得するため、サブシェルです。すべてのコマンドが0を返す場合、このオプションを有効にすると、pipefailパイプの戻りコードがゼロになるか、ゼロ以外のコード((exit 8) | true | (exit 9) | true戻りコード9など)を返す最も右側のコマンドの戻りコードが発生します。サブシェルを使用する理由は、set -o pipefailユーザーのシェルに影響を与えないためです。

見るhttps://en.wikipedia.org/wiki/ANSI_escape_code#Colorsカラーコード用。

通常、CMakeで生成されたMakefileの出力は同じ色を持ちますが、[ 42%] Building C object source_file.c.oCMakeLists.txtを使用して変更できますset(CMAKE_COLOR_MAKEFILE [ON|OFF])

出力がmakettyでない場合(たとえば、色も消えます)。この場合、make | cat環境変数(またはnull以外の値)を設定して強制的に色を出力できます。しかし、`CLICOLOR_FORCEがオフになっても効果はありません。CLICOLOR_FORCE=yes_pleaseCMAKE_COLOR_MAKEFILE

アイテムがあなたのものではなく閉じCMAKE_COLOR_MAKEFILEている場合は、リストにいくつかの選択肢を追加することで補償できます。

また、これはCLICOLOR_FORCE他のコマンドで検証される変数なので、export CLICOLOR_FORCE=yessirシェルの起動ファイルを入力すると、必要なものよりも多くの影響があります。私はそれをしません。

引用するCMAKE_COLOR_MAKEFILEhttps://cmake.org/cmake/help/latest/variable/CMAKE_COLOR_MAKEFILE.html

関連情報