私はそれを使用していますストライディッドstderr 赤色に流れるすべての出力をカラー化します。よく走っています。しかし、私自身のbashスクリプトを書いてエラーが発生すると、echo 'error' 1>&2
出力は赤く表示されません。これは、コマンドが単に出力をstderrファイル記述子が指す場所にリダイレクトしますが、メッセージをstderrに属するものとして正しく表示しないためだと思います。そうですか? Bashでstderrに正しく書き込む方法は?
ベストアンサー1
プログラムは、ファイル記述子2に印刷しているかどうかを検出するためにさまざまなwrite()関数をオーバーライドし、関連するエスケープコードを追加してターミナル出力を赤にするようです。
残念ながら、シェルで次のことを行うと
echo "foo" 1>&2
関数はまだファイル記述子1に対して書き込み(または他の同様のシステムコール)を呼び出します。ファイル記述子 1 がシェルによってファイル記述子 2 にコピーされたため、出力は fd 2 に表示されます。
残念ながら、シェルでfd 2に/directly/を書き込む方法がわかりませんが、awkを使用できます。このような関数は、引数をファイル記述子2に直接書き込みます。
error() {
awk " BEGIN { print \"$@\" > \"/dev/fd/2\" }"
}
私はこれがPOSIXの一部ではないGNU awkの機能だと思います。ただし、OS Xでも利用可能なawkでも動作します。