My RSS Reader

Description about Blog Author


helmとhelm templateについての気づき 最終回 csplitを使ったマニフェストの分割

次にcsplitを使ったマニフェストの分割について試しました。 普段使いの環境はmacOSなのですが、csplitコマンドがインストールされていました。 どうやらHomebrewを使い始めるときにインストールする、コマンドラインツールに含まれるようです。

ChatGPTさんは次のように実行すればうまくいくと提示してくれました。

csplit -s -z -f manifest_ -b “%03d.yaml” hogehuga-myapp-manifests.yaml ‘/^—$/’ ‘{*}’

ところが実行すると、csplit: illegal option -- zというエラーが表示されます。 それに対して、次のような回答がありました。

ああ、そうなんです!💡 macOS に入っている csplit は BSD版 で、-z オプション(空ファイルを削除)は GNU版のみ対応 なんです。 なので csplit: illegal option – z のエラーが出ちゃいます。

そのあと、解決策として-zオプションを使わない方法と、GNU版 csplitを使う方法が例示されました。 なるべく余計なものをインストールしたくないので、最初の案を採用しました。

csplit -s -f manifest_ -b “%03d.yaml” hogehuga-myapp-manifests.yaml ‘/^—$/’ ‘{*}’ find . -name ‘manifest_*.yaml’ -size 0 -delete

ところが、一つ目のコマンドを実行したタイミングでcsplit: illegal option -- bというエラーになりました。 それに対して、次のような回答がありました。

そうなんです、鋭い指摘ありがとうございます!💡 macOS の標準 csplit(= BSD版)は実は かなりオプションが少ない です。 -b(ファイル名の書式指定)も -z(空ファイル削除)も GNU版限定機能なんです。

先に言ってよw

そのあと、macOS標準で使えるBSD版のcsplitを使って頑張る方法が例示されたので実行したところ、csplit: *}: bad repetition countというエラーになりました。 そのことについて聞くと、さらにmacOS標準で使えるBSD版のcsplitを使って頑張る方法が出てきたのですが、ここで根を上げて次の方法で解決することにしました。

$ brew install coreutils $ gcsplit -s -z -f manifest_ -b “%03d.yaml” hogehuga-myapp-manifests.yaml ‘/^—$/’ ‘{*}’

これでyqを使った時と同じような結果になります。 yqを使うのとGNU版csplitを使う方法のどちらがいいかと聞かれれば、どっちもどっちみたいな感じでしょうか。

「AIは案外面倒くさいな」と思った人もいるかもしれませんが、質問をしてズバリの回答がきても面白くないと思うんですよね。 なんとなくよく聞かないと正解がもらえなかったり、いざ実行するとうまく動かなくて、情報を伝えていくとゴールに向かっていくような感じは人間くさく感じました。

今回色々はまったおかげで、少しだけ賢くなったような気持ちになりましたし..。いや嘘です。

[source]