標準エラーに書き込む

標準エラーに書き込む

私はそれを使用していますストライディッド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でも動作します。

おすすめ記事