Task v3.54.0 常用 CLI 命令详解

Task v3.54.0 全部 45 个 CLI 标志详解:任务发现、--init、执行控制、增量状态、watch、补全与退出码对照表,每条命令配 Ubuntu 22.04 实测回显。

Task任务运行器2026/10/25

Task v3.54.0 常用 CLI 命令详解

目标:作为 Task(go-task/task)日常使用的命令速查与详解手册,覆盖 v3.54.0 的全部 45 个 CLI 标志与核心用法:任务发现、脚手架初始化、执行控制、增量状态、watch、shell 补全与退出码对照,每条命令均给出真实实测回显。已在 Ubuntu 22.04 + Task v3.54.0 实测通过(安装见 《Ubuntu 22.04 安装 Task v3.54.0 指南》;Taskfile 各键含义见 《Task v3.54.0 Taskfile.yml 配置详解》)。

一、环境信息

  • 操作系统:Ubuntu 22.04 LTS(x86_64)
  • Task 版本:v3.54.0(task --version 实测 3.54.0,apt 渠道安装于 /usr/bin/task)
  • 实验项目:/opt/demo/,含根 Taskfile.yml 与子目录 backend/Taskfile.yml(命令均可在含 Taskfile.yml 的任意目录独立执行)
  • Shell:bash 5.1

二、CLI 总览

Task 只有一个可执行文件 task,命令行形态:

task [flags...] [task...]

无任务名时执行 Taskfile 中名为 default 的任务;任务名写错时自动列出全部任务(模糊匹配,可用 --disable-fuzzy 关闭)。标志(flag)可以放在任务名之前或之后。完整帮助输出(task --help 实测,共 45 个标志,逐行照抄):

Usage: task [flags...] [task...]

Runs the specified task(s). Falls back to the "default" task if no task name
was specified, or lists all tasks if an unknown task name was specified.

Example: 'task hello' with the following 'Taskfile.yml' file will generate an
'output.txt' file with the content "hello".

'''
version: '3'
tasks:
  hello:
    cmds:
      - echo "I am going to write a file named 'output.txt' now."
      - echo "hello" > output.txt
    generates:
      - output.txt
'''

Options:
      --cacert string               Path to a custom CA certificate for HTTPS connections.
      --cert string                 Path to a client certificate for HTTPS connections.
      --cert-key string             Path to a client certificate key for HTTPS connections.
      --clear-cache                 Clear the remote cache.
  -c, --color                       Colored output. Enabled by default. Set flag to false or use NO_COLOR=1 to disable. (default true)
      --completion string           Generates shell completion script.
  -C, --concurrency int             Limit number of tasks to run concurrently.
  -d, --dir string                  Sets the directory in which Task will execute and look for a Taskfile.
      --disable-fuzzy               Disables fuzzy matching for task names.
      --download                    Forces task to download remote Taskfiles and ignore any cached versions.
  -n, --dry                         Compiles and prints tasks in the order that they would be run, without executing them.
  -x, --exit-code                   Pass-through the exit code of the task command.
      --experiments                 Lists all the available experiments and whether or not they are enabled.
      --expiry duration             Expiry duration for cached remote Taskfiles.
  -F, --failfast                    When running tasks in parallel, stop all tasks if one fails.
  -f, --force                       Forces execution even when the task is up-to-date.
  -g, --global                      Runs global Taskfile, from $HOME/{T,t}askfile.{yml,yaml}.
  -h, --help                        Shows Task usage.
  -i, --init                        Creates a new Taskfile.yml in the current folder.
      --insecure                    Forces Task to download Taskfiles over insecure connections.
      --interactive                 Prompt for missing required variables.
  -I, --interval duration           Interval to watch for changes.
  -j, --json                        Formats task list as JSON.
  -l, --list                        Lists tasks with description of current Taskfile.
  -a, --list-all                    Lists tasks with or without a description.
      --nested                      Nest namespaces when listing tasks as JSON
      --no-status                   Ignore status when listing tasks as JSON
      --offline                     Forces Task to only use local or cached Taskfiles.
  -o, --output string               Sets output style: [interleaved|group|prefixed].
      --output-group-begin string   Message template to print before a task's grouped output.
      --output-group-end string     Message template to print after a task's grouped output.
      --output-group-error-only     Swallow output from successful tasks.
  -p, --parallel                    Executes tasks provided on command line in parallel.
      --remote-cache-dir string     Directory to cache remote Taskfiles.
  -s, --silent                      Disables echoing.
      --sort string                 Changes the order of the tasks when listed. [default|alphanumeric|none].
      --status                      Exits with non-zero exit code if any of the given tasks is not up-to-date.
      --summary                     Show summary about a task.
  -t, --taskfile string             Choose which Taskfile to run. Defaults to "Taskfile.yml".
      --temp-dir string             Sets the directory used to store Task temporary files, such as checksums. Relative paths are relative to the root Taskfile.
      --timeout duration            Timeout for downloading remote Taskfiles. (default 10s)
      --trusted-hosts strings       List of trusted hosts for remote Taskfiles (comma-separated).
  -v, --verbose                     Enables verbose mode.
      --version                     Show Task version.
  -w, --watch                       Enables watch of the given task.
  -y, --yes                         Assume "yes" as answer to all prompts.

💡 说明:Task 的 CLI 没有「子命令」概念——--init、--list、--completion 这些是全局标志而非子命令,可与任务名自由组合(如 task --list --json)。

三、前置条件

  1. Task 已安装并可用:
task --version

实测输出:

3.54.0
  1. 工作目录(或其任意父目录)下存在 Taskfile.yml。目录里没有 Taskfile 时会明确报错:
mkdir -p /tmp/empty-demo && cd /tmp/empty-demo && task; echo exit=$?

实测输出:

task: No Taskfile found at "" (or any of the parent directories). Run `task --init` to create a new Taskfile.
exit=100

四、任务发现与清单类

4.1 task:执行默认任务

task

无参数调用 = 执行 default 任务;若 default 任务的内容是 task --list(模板常见写法),实测输出即任务清单:

task: Available tasks for this project:
* build:                 编译产物(sources/generates 增量演示)
* cli-args:              CLI_ARGS 演示
* default:               默认任务(显示帮助)
* hello:                 打印问候语
* backend:build:         编译后端服务

(节选:清单按「本文件任务在前、includes 命名空间在后」排列。)

4.2 --list / --list-all:列出任务

--list 只显示带 desc 描述的任务,--list-all 显示全部。实测:

task --list
task: Available tasks for this project:
* build:        编译产物(sources/generates 增量演示)
* hello:        打印问候语
* backend:build: 编译后端服务
task --list-all
task: Available tasks for this project:
* build:        编译产物(sources/generates 增量演示)
* cli-args:     CLI_ARGS 演示
* default:      默认任务(显示帮助)
* backend:build: 编译后端服务

排序可用 --sort none|alphanumeric|default 控制(none 保持 Taskfile 声明顺序)。隐藏任务(includes 的 internal: true)不会出现在两个清单中。

4.3 --list --json:机器可读清单

task --list --json | head -c 600

实测输出(节选):

{
  "tasks": [
    {
      "name": "build",
      "task": "build",
      "desc": "编译产物(sources/generates 增量演示)",
      "aliases": [],
      "up_to_date": true,
      "location": {
        "line": 38,
        "column": 3,
        "taskfile": "/opt/demo/Taskfile.yml"
      }
    },

配套 --nested(命名空间嵌套成 JSON 树)与 --no-status(跳过增量判定、加速大项目)。适合 CI 里动态发现任务。

4.4 --summary:任务摘要

task --summary build

实测输出(节选,实测首尾):

task: build

编译产物(sources/generates 增量演示)

vars:
  APP_NAME: "demo-app"
  GREETING: "Hello"
  COMMIT_HASH: sh: echo a1b2c3d

env:
  APP_ENV: "production"
  DATABASE_URL: "postgres://admin:q1w2e3r4@localhost:5432/demo"

commands:
 - mkdir -p dist
 - cp src/app.txt dist/app.txt
 - echo "built "

排障利器:变量求值结果与最终命令一次看全。

五、初始化与脚手架类

5.1 --init:生成 Taskfile.yml

task --init

实测输出:

Taskfile created: Taskfile.yml

生成的模板(实测 cat Taskfile.yml 全文):

# yaml-language-server: $schema=https://taskfile.dev/schema.json

version: '3'

vars:
  GREETING: Hello, world!

tasks:
  default:
    desc: Print a greeting message
    cmds:
      - echo "{{.GREETING}}"
    silent: true

立即验证:

task

实测输出:

Hello, world!

六、执行控制类

6.1 运行指定任务与传变量

task hello
task: [hello] echo 'Hello World! (demo-app v3)'
Hello World! (demo-app v3)
task requires-demo ENVIRONMENT=production
task: [requires-demo] echo "deploy to production"
deploy to production

命令行 KEY=VALUE 覆盖 Taskfile 内同名变量。-- 之后的参数透传给任务的 {{.CLI_ARGS}}:

task cli-args -- --foo bar
task: [cli-args] echo "args are --foo bar"
args are --foo bar

6.2 --force:跳过增量判定强制执行

已是最新(up to date)的任务默认被跳过:

task build
task: Task "build" is up to date
task --force hello
task: [hello] echo 'Hello World! (demo-app v3)'
Hello World! (demo-app v3)

6.3 --dry:干跑

task --dry build
task: [build] mkdir -p dist
task: [build] cp src/app.txt dist/app.txt
task: [build] echo "built a1b2c3d"

打印执行计划但不真正执行;改了 Taskfile 先 --dry 验证是良好习惯。

6.4 --parallel / --concurrency / --failfast:并行编排

task --parallel hello cli-args
task: [cli-args] echo "args are "
task: [hello] echo 'Hello World! (demo-app v3)'
args are 
Hello World! (demo-app v3)

两个任务同时启动(回显顺序随机)。-C 2 限制并发度为 2;-F/--failfast 在任一并行任务失败时立刻停止其余任务(默认行为是失败任务退出、其余跑完)。

6.5 --silent / --output:输出控制

task --silent hello
Hello World! (demo-app v3)

-s 关闭 task: [任务名] 命令 的回显行。输出整理模式:

task --output prefixed --parallel hello cli-args
task: [cli-args] echo "args are "
task: [hello] echo 'Hello World! (demo-app v3)'
[cli-args] args are 
[hello] Hello World! (demo-app v3)

-o group 按任务聚组输出(CI 折叠日志),--output-group-begin/end 自定义组首尾模板、--output-group-error-only 只展示失败任务的组。

6.6 -d/--dir 与 -t/--taskfile:定位执行上下文

task -d /opt/demo/backend build

-d 指定查找与执行 Taskfile 的目录;-t 直接指定 Taskfile 文件路径(如 -t deploy/Taskfile.prod.yml);-g/--global 使用 $HOME/Taskfile.yml(放个人高频命令,与项目无关)。

七、增量与状态类

7.1 --status:以退出码上报增量状态

task --status build; echo exit=$?

实测输出(已最新):

exit=0

给定任务只要有一个不是最新就返回非零(不产生任何输出),专为 CI 门禁设计——「产物是否需要重建」一行命令判断。

7.2 -w/--watch 与 -I/--interval:文件监听

task -w build

实测输出(运行中修改 src/app.txt 触发一次重跑,Ctrl+C 退出):

task: Started watching for tasks: build
task: Task "build" is up to date
task: task "build" finished running
task: [build] mkdir -p dist
task: [build] cp src/app.txt dist/app.txt
task: [build] echo "built a1b2c3d"
built a1b2c3d
task: task "build" finished running

-I 500ms 调整轮询间隔(默认 100ms);监听范围由任务的 sources 决定。

7.3 --temp-dir:增量状态目录

task --temp-dir .task-cache build

默认增量状态写 .task/(相对根 Taskfile);--temp-dir 改位置。删除该目录 = 清空增量记忆、下次全量重跑。

八、环境、集成与远程 Taskfile 类

8.1 --completion:生成 shell 补全

task --completion bash | head -5

实测输出(节选):

# vim: set tabstop=2 shiftwidth=2 expandtab:
#
# Thin wrapper around `task __complete`: all suggestion logic lives in the Go engine.

TASK_CMD="${TASK_EXE:-task}"

支持 bash|zsh|fish|nushell|powershell 五种 shell,推荐在 rc 文件里 eval "$(task --completion bash)" 动态加载(始终与已装版本同步)。apt 安装已自动放置补全文件(见安装篇 4.4)。

8.2 --experiments / --version / --verbose / --color

task --experiments
* GENTLE_FORCE:   off
* ENV_PRECEDENCE: off
task --version
3.54.0

-v 输出 Taskfile 加载与增量判定的详细过程;--color=false 或环境变量 NO_COLOR=1 关闭彩色输出(CI 场景常用)。

8.3 远程 Taskfile 相关标志

标志默认值作用
--downloadoff强制重新下载远程 Taskfile、忽略缓存
--offlineoff只用本地/缓存,不联网
--timeout10s下载远程 Taskfile 的超时
--expiry—缓存的有效期
--remote-cache-dir—缓存目录
--trusted-hosts—信任的远程主机列表
--cacert / --cert / --cert-key—HTTPS 自定义证书三件套
--insecureoff允许 http 明文下载
--clear-cacheoff清空远程缓存

远程 Taskfile 指 includes 中 taskfile: 为 https URL 的引用(须配 checksum 锁定),上述标志控制其下载与信任策略。

九、退出码对照表

以下退出码均在本文实测环境中逐个触发验证:

退出码触发场景实测命令
0成功task hello
1任务内命令失败(--exit-code 透传场景)或未装 task 时 which 未命中task defer-demo
100找不到 Taskfilecd /tmp && task
141SIGPIPE(管道下游提前关闭,如 | head)task --list | head -1
201preconditions 未满足 / 任务内命令失败(默认透传场景)task precond-demo
205prompt 被拒绝(非终端环境)task prompt-demo
206requires 缺必需变量task requires-demo
207requires 变量值不在枚举内task requires-demo ENVIRONMENT=staging

💡 说明:非零退出码体系让 CI 能精确区分「失败类型」——201/206/207 属于配置与守卫问题,应修 Taskfile;1 才是任务本身执行失败。

十、注意事项

  1. 标志与任务名可混排:task build --force 与 task --force build 等价;但 KEY=VALUE 变量赋值要放在任务名之后(task hello TARGET=x)。
  2. -- 之后的才是 CLI_ARGS:不写 -- 时参数会被 Task 当作任务名解析。
  3. which -a task 防多版本混淆:apt/npm/脚本三种渠道可并存,PATH 顺序决定实际执行者。
  4. watch 与 CI 互斥:watch 永不退出,自动化流水线中不要带 -w。
  5. task --list 空清单:说明没有任何任务写 desc;要么补 desc,要么用 --list-all。

十一、常见问题(FAQ)

Q1:任务名记不全,输入一半能执行吗?

能。Task 默认开启模糊匹配(fuzzy matching),task buil 会匹配到 build;误匹配多个候选时会列出让用户确认。不希望模糊行为时加 --disable-fuzzy。

Q2:task --list 显示的任务和我改的不一致?

确认执行位置:Task 会从当前目录逐级向上找 Taskfile.yml,可能在父目录命中了别的文件。用 task -d <目录> 显式指定,或 task -t <文件> 直接指定 Taskfile。

Q3:输出里的颜色码污染了 CI 日志?

NO_COLOR=1 task --list 或 task --color=false --list,实测可得到纯文本清单。

Q4:task 命令执行了但没动静?

大概率命中了增量判定(Task "build" is up to date 被静默吞掉的场景较少,更多是 status 判定跳过)。排查顺序:task --verbose <任务> 看 internal 日志 → task --force <任务> 强制执行 → 删除 .task/ 重置增量状态。

Q5:npm 渠道安装后 task 指向的版本和 apt 渠道不一致?

见安装篇 FAQ Q4:which -a task 列出全部候选,PATH 靠前者生效;生产环境固定单一渠道安装。

十二、参考链接