標準エラーを赤で印刷する方法


14

同じ色の標準出力を使用する代わりに、標準エラーを赤でコンソールに印刷するにはどうすればよいですか?

Gnomeターミナルを使用することは可能ですか?


このリンクはあなたを助けるかもしれません
-devav2

ユーティリティを使用してhilite 1つのコマンドに対してこの動作を有効にできますhilite使用するには、シェルコマンドの前に手動で追加する必要がありますが、コマンドがエラーを出力していることを知っているか疑いがある場合、それらを見つけるのに役立ちます。
ロリーオケイン14年

回答:


8

私はstderredを使用し、それが良い解決策であることを発見しました。readmeのメモとして:

ターミナルに送られるすべてのstderr出力を色付けしてstdoutと区別できるようにするために、libcのwrite()およびストリーム関数(fwrite、fprintf、error ...)のStderredフック。基本的に、記述子「2」でファイルに送られるテキストを、適切なANSIエスケープコードでラップして、テキストを赤にします。

共有ライブラリとして実装されており、動的リンカのプリロード/挿入機能のおかげで、既存のバイナリを再コンパイルする必要はありません。

Linux(LD_PRELOADを使用)、FreeBSD(LD_PRELOADを使用)、OSX(DYLD_INSERT_LIBRARIESを使用)でサポートされています。

コンパイルは簡単ですが、Githubサイトの指示に従ってソースからビルドする必要があります。

sudo apt-get install build-essential git cmake 

それから

git clone git://github.com/sickill/stderred.git
cd stderred

それから

make

それの最も重要な部分は、適切な行を追加すること.bashrcです; libstderred.soビルドディレクトリ内のファイルにリンクする必要があります。ビルドディレクトリの絶対パス(/ home / mike / src / stderred / build)を使用する必要があります。私は以下を以下に追加します.bashrc

export LD_PRELOAD="/home/mike/src/stderred/build/libstderred.so${LD_PRELOAD:+:$LD_PRELOAD}"

明らかに、これ以上使用したくない場合は、上記の行を削除して.bashrc、ターミナルを再起動してください。

存在しないファイルでテストされた結果(異なる環境が設定さsudoれている場合、ユーザーのファイルは.bashrc読み取られないため、使用時には明らかに動作しません):

(ちなみに、すでに duke @ nukemプロンプトが赤になっているわけはありません

ここに画像の説明を入力してください


これが存在することを知らずに何年も行ったなんて信じられない!これは驚くほど便利で、今から100年ほどOSの一部になっているはずです。:)
ロジャーダール

6

GnomeターミナルはANSIターミナルであり、標準のANSIエスケープコードをサポートしているため、一般的にはそうです。

以下に例を示します。これを端末に入力します。

echo -e "\e[01;31mREDRUM\e[0m"

この-eオプションを使用すると、バックスラッシュコードを解釈できるため、\e「Esc」(16進コード0x1B)になります。または、エスケープを直接入力するには、を押しますctrl-V Escます。

echo  "^[[01;31mREDRUM^[[0m"

エスケープと[両方が一緒になって、端末によって認識されるコードを形成します。そのシーケンスの後に、コロンで;区切られた属性のリストを挿入する必要がありますm。すべてのコードについてはこちらをご覧ください。例には、属性0(上記の例を終了するシーケンスであるように、すべての属性をリセットする)とスタイルの束(下線、明るい、太字など)およびいくつかの色属性が含まれます。

上記の答えは、独自のプログラムを作成するときに色を使用する方法を示しています。

ただし、質問を正しく理解している場合は、実行しているプログラムのstderrとstdoutを視覚的に分離したいと考えています。これは、フィルターを介して出力を解析しないと簡単ではありません。方法の例を次に示します(ここにあります)。

  1. 関数を定義します(.bashrcファイルに配置できます):

    color() { "$@" 2>&1>&3|sed 's,.*,\x1B[31m&\x1B[0m,'>&2; } 3>&1
    
  2. 次のようなプログラムを開始します。

    color program
    

プログラムの標準エラーは赤色になります。


とにかく、プログラムからのエラーメッセージを色付けする方法はありますか?
ルーク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.