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 が失敗することもありません。