はじめに
エラーログを取りたいなどの目的で使う場合もありますが,一部のコマンド,実行ファイルではなぜか目的の出力を標準エラー出力(stderr)から出してくる場合がある.
例えば imagemagick の compare
コマンドで metric の出力を得たい場合に通常のように
METRIC=`compare -metric PSNR file.png file.jpg diff.png`
などとしても metric はそのまま端末に表示されて METRIC
には何も代入されない.
先述したとおり, compare
コマンドの metric はどういうわけか標準エラー出力から出されるためである.
解決策
標準エラー出力のみを変数に入れたい場合は以下のようにする.
ERR="$(実行コマンド 2>1& > /dev/null)"
これで標準出力は /dev/null
に捨て,エラー出力のみを ERR に代入することができる.
(なんで標準出力から結果を出さないんだよ!)