2

出力に色を追加するために mvn (Apache Maven) をラップする bash スクリプトがあります。それが行うことの縮小版は次のとおりです。

mvn "$@" | sed -e "s/^\[INFO\] \-.*/$bldblu&$rst/g"

太字の$bldblu青を表す ANSI カラー エスケープ文字で$rst、色をリセットします。

私が抱えている問題は、mvn が改行で終わらない行を書き込むことがあるため、(私が知る限り) sed が入力を待機し続け、プロンプトを出力しないことです (Maven がハングしているように見えます)。 )。私はsedに追加しようとしまし-uたが、それはsedが複数行をバッファリングするのではなく、行ごとのバッファリングを強制するだけです-私にとっては役に立ちません。

これまでのところ、これは私が思いついたものです:

mvn "$@" | perl -pe "$| = 1; s/^(\[INFO\] \-.*)/$bldblu\$1$rst/g"

-pしかし、ここでの使用は正しくないと思います。何か助けはありますか?

4

2 に答える 2

0

特に置換パターンに特殊文字が含まれている場合、置換はやり過ぎかもしれません。これはどう?

export bldblu
export rst
mvn "$@" | perl -pe 'if(/^.INFO. -/){ $_=$ENV{bldblu}.$_.$ENV{rst} }'

車輪の再発明ではなく

mvn "$@" | perl -MTerm::ANSIColor -pe 
    '$_=color("bold blue").$_.color("reset") if /^.INFO. -/'
于 2012-11-19T16:17:00.367 に答える