関連記事
Task (go-task) メモ-23 (loop over static list, ループ機能, 静的なリストをループ) - いろいろ備忘録日記
Task (go-task) メモ-24 (loop over task's source, ループ機能, タスクソースをループ) - いろいろ備忘録日記
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
これまでの Task に関する記事は上の関連記事をご参照ください。
v3.28.0 から待望のループ機能が追加されました。これは嬉しいです。
ドキュメント上での記載は以下となります。
いろいろなやり方が記載されていますが、今回は変数の値をループするやつを。
一番利用する頻度が高いであろうものですね。
基本形は以下のようになります
task-name: cmds: - for: loop-source cmd: command {{ .ITEM }}
ループ中の項目は {{ .ITEM }}
で参照できます。
サンプル
# https://taskfile.dev version: "3" silent: true vars: VAL1: Hello World VAL2: HELLO,WORLD VAL3: sh: find ../ -name '*.yml' -type f tasks: default: cmds: - task: use-val1 - cmd: echo '--------------------------------------' - task: use-val2 - cmd: echo '--------------------------------------' - task: use-val3 use-val1: cmds: - for: { var: VAL1 } cmd: echo {{ .ITEM }} use-val2: cmds: - for: { var: VAL2, split: "," } cmd: echo {{ .ITEM }} use-val3: cmds: - for: { var: VAL3 } cmd: wc -l {{ .ITEM }}
実行すると以下のようになります。
$ task --version Task version: v3.28.0 (h1:PGYGwevlGQdYrqhO6lLCYylC7YuGoQLlVwHkO42gf0I=) $ task Hello World -------------------------------------- HELLO WORLD -------------------------------------- 11 ../.gitpod.yml 20 ../01.helloworld/Taskfile.yml 9 ../03.default-task/Taskfile.yml 15 ../04.env/Taskfile.yml 10 ../05.dotenv/Taskfile.yml 14 ../06.include/Taskfile.yml 6 ../06.include/other/Taskfile.yml 6 ../06.include/other2/othertaskfile.yml 6 ../07.no-color/Taskfile.yml 17 ../08.silent/Taskfile.yml 9 ../09.os-specific/Taskfile.yml 5 ../09.os-specific/Taskfile_linux.yml 5 ../09.os-specific/Taskfile_windows.yml 18 ../10.variable/Taskfile.yml 8 ../11.cliargs/Taskfile.yml 25 ../12.defer/Taskfile.yml 24 ../13.internal-task/Taskfile.yml 37 ../14.shopt/Taskfile.yml 22 ../15.single-command-task/Taskfile.yml 13 ../16.prompt/Taskfile.yml 15 ../17.dryrun/Taskfile.yml 13 ../18.preconditions/Taskfile.yml 13 ../19.loop-over-static-list/Taskfile.yml 16 ../20.loop-over-task-source/Taskfile.yml 33 ../21.loop-over-variables/Taskfile.yml
コマンドの実行結果を変数に格納しておき、それをループするやり方が一番利用すると思います。
以下のようにやります。
vars: 変数名: sh: コマンド
以降は、 {{ .変数名 }}
で使えます。
例としては以下のような感じ。
$ ls -1 Taskfile.yml go.mod main.go $ cat Taskfile.yml # https://taskfile.dev version: '3' tasks: default: vars: items: sh: find . -type f \( -name '*.go' -o -name '*.mod' \) cmds: - echo '{{ .items }}' silent: true $ task ./go.mod ./main.go
bash - How to combine 2 -name conditions in find? - Unix & Linux Stack Exchange
参考情報
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。