CIが失敗するのでgrepじゃなくsedを使う
2022-03-17 / GitHub Actions, Shell Script
ユースケースによるのですが、テキストのフィルターや検索は安直にgrepを使うもんでもないなと気付きました。
grep は検索条件に一致しないとエラーになる
正確には終了時のステータスが1になるので CI では失敗扱いになってしまいます。
通常では、選択される行が見つかったときの終了ステータスは 0 であり、 見つからなかったときは 1 であり、エラーが起きた場合は 2 です。
見つからなくてもステータスを0にするオプションはないようです。
もちろん見つからなかったら CI を止めたい場合には grep が良いでしょう。
sed で代替する
色々やり方はあると思うのですが、デフォルトでは非表示にして一致したら表示するコマンドで対応できそうです。
grep を使う例を変更します。
# condition に一致しなければステータス 1
dosomething | grep -E -e 'condition'
これをこのように書き換えます。
# condition に一致しなくてもステータスは 0
dosomething | sed -n -E -e '/condition/p'
-nはデフォルト出力をしないためのオプションです。/condition/pのpが直前の条件に一致した行を表示するというコマンドになります。
この場合、一致するテキストがなくてもステータスは0で終了するので、つられて CI が失敗することもありません。