😭

diffの戻り値が1なのでビルドジョブが止まっちゃう件

2022/11/17に公開

この記事の概要

intro

jenkinsなど、ビルドジョブの中でコマンドの終了ステータスが1の場合
ジョブが失敗判定になって止まることがあると思います。
でもバックアップファイルとの差分は出したいし...みたいな場合の対処法です。

diffの戻り値は1

表題の通り、diffコマンドで差分があった場合の戻り値は1です。

差分ナシ
[boomkun@laptop ~]$ diff <(echo boomkun) <(echo boomkun)
[boomkun@laptop ~]$ echo $?
0
差分アリ
[boomkun@laptop ~]$ diff <(echo boomkun) <(echo zenn)
1c1
< boomkun
---
> zenn
[boomkun@laptop ~]$ echo $?
1

この場合、ログとして差分を吐き出しているだけなのに
1だからジョブが止まっちゃう ということが起きてしまいます。

どうハンドリングするか

||OR演算子をdiffの直後に入れてしまえば1が出なくなります。

[boomkun@laptop ~]$ diff <(echo boomkun) <(echo zenn) || echo difference above
1c1
< boomkun
---
> zenn
difference above
[boomkun@laptop ~]$ echo $?
0

メッセージ出したくない場合:ヌルコマンドを実行してもいいですね。

[wsl-user@PC-387 ~]$ diff <(echo boomkun) <(echo zenn) ||:
1c1
< boomkun
---
> zenn
[boomkun@laptop ~]$ echo $?
0

outro

if文で終了ステータス見るよりも記述が簡素で良い気がしています。
他にもやり方あれば教えて下さい。

Discussion