kachick / times_kachick

`#times_kachick channel in chat` as a public repository. Personal Note and TODOs
https://github.com/kachick/times_kachick/issues?q=is%3Aissue+is%3Aclosed
6 stars 0 forks source link

2024-03-13 - grep ファミリーは有空死を三値で表現しているので「正常に動いた上で一件もマッチしなかった」判定には exit code を使う #278

Closed kachick closed 6 months ago

kachick commented 6 months ago

exit code はユニットテストランナーで落ちた数を含めて返すような事に使ったりもしてたけど、それにしたって結局はOK/NGで二値を意識する事が殆どだった。返す側が色々意味込めてるんだからユーザー側も気づけたほうが良いやろとシェルのプロンプトに常時表示するような事も試したけど、必要にならない割に気になりやすく、すぐ削ってしまった。 https://github.com/kachick/dotfiles/pull/270/commits/106e5752a2448a7348af60baa40c8ba1b28fc42b

しかしその捉え方だと困ってしまうツールがなんとも身近にあって、grep とそこから派生した alt grep の類は一件もマッチしなかった時にOKを返すようなオプションが(多分メジャーどこのどれにも)無い。-v による invert-match はマッチ条件の判定だからここでは関係ないし、|| true とか行頭への ! 付与みたいな手段は全て grep 系コマンドの実行プロセス全体に通してかかるから、例えば間違ったオプションや文法壊れている正規表現渡したような例外時も反転してOK扱いになってしまう。 いやー、となると別途フィルタリングして比較するようなことを・・・とか考えてた時に ripgrep の issue を覗くとこれに関する質問や要望がいっぱいあって、grep family はこの手のことを古来 exit code で表現して来たんだよ、man にも書いてあるよ。との回答 https://github.com/BurntSushi/ripgrep/issues/1290#issuecomment-761170095 が。

なるほど、ここで exit code か〜。なんか10年以上前に HP-UX とか触ってた頃この辺に行き当たってたような気もうっすらしてきたけど、とりあえず忘れていた。 最近は man を読むより --help とか https://github.com/tldr-pages/tldr みたいなので大体済ませてたからなー。基礎が抜けてしまう。

ということでこの判定が必要だった箇所には [[ $? -eq 1 ]] なりを差し込んだんだけど、最近は bash で当然のようにつけてる set -e が効いていると0以外が返った瞬間に死ぬので一時的にオフにしなければならず、面倒感は拭えなかった。 https://github.com/kachick/dotfiles/commit/6f1b9f72a08c204673040662c74da09fa9a752d1#diff-87249919b62f3d7f70416176a4254d5df6e59eab47c6de2a2a4fbbcf4138cbacR97-R103

そして悔い改めるというか他のツールからの戻りにも気を配りたくなったので、前より控えめな感じでプロンプトに溶け込ませるようにしておいた。 https://github.com/kachick/dotfiles/pull/470 これによる面白い発見が今後あるやろうか (尚 PowerShell は何でもかんでも0を返すので扱いが異常に面倒)

kachick commented 1 week ago

返り値が有るんだから大事なのは当たり前の話と思いつつ、実際活用しているというか考慮しないと行けないケースが全体の中で少ない印象だったんだけど他に pngquant が --skip-if-larger を与えられて本当にskipしたときには 98 を返すというのがあった。

https://github.com/JamieMason/ImageOptim-CLI/issues/182#issuecomment-547879109 https://github.com/kornelski/pngquant/issues/237#issuecomment-338964340 https://github.com/kachick/micro-kdl/blob/938fc34516f0a356c01ab18858d0ad7d9125e9e7/Taskfile.yml#L26-L27