0

mvn verify 出力を解析して、INFO タグのある行のみを表示しようとしています。Mavenは、バッチではなく、リアルタイムでstdout に行を出力することに注意してください。私はそれがmavenの問題だとは思わない。

最初はgrepでやろうとしました:

$ mvn verify | grep INFO

しかし、出力する前にgrepがその行をバッファリングすることを理解しているため、リアルタイムで行を出力しているようには見えませんでした。 . それから私はsedで試してみようと思いました。

このリンクによると、次のコマンド:

sed -n '/PATTERN/p' file
// is equivalent to 
grep PATTERN file

このリンクによると、 -l オプションは、改行ごとに sed に出力バッファーを強制的にフラッシュさせる必要があります。だから今、私はこのコマンドを使用しています:

 $ mvn verify | sed -ln -e '/INFO/p'

しかし、私はまだ以前と同じ結果を得ています.30秒ごとに大量の出力がフラッシュされ、何が間違っていたのかわかりません. 誰かが私を正しい方向に向けることができますか?

4

3 に答える 3

1

grepがサポートしている場合は、これを試してください。

mvn verify | grep --line-buffered INFO

ターミナルでこれを実行していて、まだバッファリングされた結果が表示されている場合は、おそらくgrepがバッファリングを実行するよりも早いでしょうが、私はに精通していませんmvn。(そして、はい、同じこと-lをするsedべきだったので、問題は上流にあるかもしれません。)

于 2013-01-28T17:09:07.087 に答える
1

この行を試してください:

mvn verify | while read line; do echo $line|grep INFO; done
于 2013-01-28T21:03:55.070 に答える
0

問題が何であるかを見つけました。スクリプトを使用してMaven出力を色付けしていました(ここを参照)。実際、出力をパイプにバッファリングしていたのはそのスクリプトでした。エイリアスとして使っていたので忘れてしまいました。これは良い教訓だと思います。将来、エイリアスを簡単に作成することはできません。とにかくここに修正があります、私はsed呼び出しの最後の行でに変更-eしました:-le

  mvn $@ | sed -e "s/\(\[INFO\]\ \-.*\)/${TEXT_BLUE}${BOLD}\1/g" \
               -e "s/\(\[INFO\]\ \[.*\)/${RESET_FORMATTING}${BOLD}\1${RESET_FORMATTING}/g" \
               -e "s/\(\[INFO\]\ BUILD SUCCESSFUL\)/${BOLD}${TEXT_GREEN}\1${RESET_FORMATTING}/g" \
               -e "s/\(\[WARNING\].*\)/${BOLD}${TEXT_YELLOW}\1${RESET_FORMATTING}/g" \
               -e "s/\(\[ERROR\].*\)/${BOLD}${TEXT_RED}\1${RESET_FORMATTING}/g" \
               -le "s/Tests run: \([^,]*\), Failures: \([^,]*\), Errors: \([^,]*\), Skipped: \([^,]*\)/${BOLD}${TEXT_GREEN}Tests run: \1${RESET_FORMATTING}, Failures: ${BOLD}${TEXT_RED}\2${RESET_FORMATTING}, Errors: ${BOLD}${TEXT_RED}\3${RESET_FORMATTING}, Skipped: ${BOLD}${TEXT_YELLOW}\4${RESET_FORMATTING}/g"

事実上、これはsedに新しい行ごとに出力をフラッシュするように指示しています。これは私が望んでいたことです。申し訳ありませんが、より一般的な別の回避策が見つかりませんでした。空のマニュアルページを参照)とスクリプトで遊んでみましたが、これらの解決策はどれもうまくいきませんでした。

于 2013-01-29T17:17:14.007 に答える