回答:
私は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プロンプトが赤になっているわけではありません)
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を視覚的に分離したいと考えています。これは、フィルターを介して出力を解析しないと簡単ではありません。方法の例を次に示します(ここにあります)。
関数を定義します(.bashrcファイルに配置できます):
color() { "$@" 2>&1>&3|sed 's,.*,\x1B[31m&\x1B[0m,'>&2; } 3>&1
次のようなプログラムを開始します。
color program
プログラムの標準エラーは赤色になります。