エスケープシーケンス使うとUNIXシェルからの出力に色を付けることができる
でも、こいつをファイルにリダイレクトすると、ゴミが入ってしまう
(追記開始)
コメ欄より:
test -t 1 コマンドで、出力先が端末かそれ以外かの判断ができるので、その結果を用いてエスケープシーケンス出力の有無を判断すれば良い。
----- 終了 --------------------------------------------
(追記終了)
で、まぁシェルスクリプトからisatty()なんて呼べねーよなーとか思ってて放置してたんだけど、GNU版grepが、パターンにマッチした文字列に色を付ける機能を持っていることが判明。--color=autoと指定すると、grepが内部で端末への出力の場合エスケープシーケンスで色を付けて、ファイルへの出力では色をつけないように設定してくれるようです。
bashの関数にするとこんな感じです
function super_echo {
echo $* | GREP_COLOR='01' grep --color=auto '.' 2> /dev/null
if [ $? -ne 0 ]; then
echo $*
fi
}super_echo Hello, World!
実行結果はこんな感じです
autoconfを使う場合はこんな感じです。autoconfで使う場合、どんなシェルでも動くようにしなければならないためbashの関数機能は使えないです。代わりにマクロを利用します。あと、if文でよく使う[]が、m4マクロ的な理由で使えないです。
AC_DEFUN([SUPER_ECHO], [
echo $1 | GREP_COLOR='01' grep --color=auto '.' 2> /dev/null
if test $? -ne 0; then
echo $1
fi
])
SUPER_ECHO([Hello, World!])
実行結果はこんな感じです
enjoy!
--------
autoconf 2.65(最新版)でconfigureスクリプト作った。
最新版minixで実行したら、「grepが長いラインを処理できいか-eオプションが複数つかなくてnot acceptable」とかで停止した。
minix...(´;ω;`)ブワッ... パッケージisoにGNU版grepがあったので入れたら通った。
トラックバックURL: http://www.lunaport.net/mt/mt-tb.cgi/24
test -t 1
ご指摘ありがとうございます。
...orz