コマンド(Inkscape、 "no-gui"モード)を実行するExecタスクがあります。このコマンドは信じられないほど騒がしく、重要ではない警告をstderrに吐き出す傾向があります。しかし、stderrに送るものの中には有用なものもありますので、私はstderrを完全に抑制したくありません。gradle Execタスクでstderrを簡単にフィルタリングする方法はありますか?
現在、私はgrep -v
を使用して私が無意味だと知っているstderrからのメッセージを除外するラッパーシェルスクリプトを持っています。次に、私のExecタスクがこのスクリプトを呼び出させるようにします。
私は外部のシェルスクリプトに頼る必要がないように、これを自己完結型にする方法があるのだろうかと思います。
#!/bin/bash
svg="$1"
png="$2"
exec inkscape -z -D -w 48 -e "$png" "$svg" 2> >(
grep -v '^\*\* (inkscape:[0-9]*): CRITICAL \*\*: dbus_g_' |
grep -v '^$' |
grep -v '^Failed to get connection$' >&2
)
(はい、それを信じるかどうか、それらの "CRITICAL" エラーは取るに足らないです:
task createIcon(type:Exec) {
def outdir = new File(fromSvgDir, "drawable-ldpi/")
outputs.dir(outdir)
doFirst {
outdir.mkdirs()
}
def svg = 'src/images/ic_launcher.svg'
inputs.source(new File(svg))
def png = new File(outdir, "ic_launcher.png")
outputs.file(png)
commandLine "$workingDir/svgToPng.sh", svg, png
}
とsvgToPng.sh
は次のようになります。
私のGradleのタスクは、次のようになりますInkscapeは実際には、インクがなくても何をするかで成功しています)。
あなたは何を持っているか、例外をスローすることによって、ビルドを停止する可能性現時点では? –
@tim_yates質問の更新を参照してください。 –
うーん、あなたは即座にプロセスのアウトストリームをフィルタリングできるかどうかは確信していませんが、確かに自分のストリームに出力を保存して、プロセスが終了した後に*処理/フィルタリング/印刷を行うことができます。 – RaGe