You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Taskfile设置仅当二进制文件不存在时运行的前置条件?

在Taskfile中实现二进制不存在时执行任务的前置条件

修正后的Taskfile配置

你可以调整变量和前置条件逻辑,确保仅当golang-migrate不存在时才执行任务:

tasks:
  migrate:
    desc: Get golang-migrate
    cmds:
      - echo running wget bla bla  # 替换为实际安装命令,比如 wget ...
    preconditions:
      - sh: "test -z {{.MIGRATE_BIN}}"
        msg: "golang-migrate已存在,跳过任务"
    vars:
      MIGRATE_BIN:
        sh: which golang-migrate || true  # 找不到时返回空字符串,避免命令报错终止

逻辑说明

  • MIGRATE_BIN变量通过which golang-migrate || true获取二进制路径:找到时返回对应路径,找不到时返回空(|| true保证命令始终返回0,避免Taskfile因命令报错中断)。
  • 前置条件test -z {{.MIGRATE_BIN}}:当MIGRATE_BIN为空(即二进制不存在)时,test命令返回0,前置条件通过,任务执行;否则返回非0,触发msg并跳过任务。

关于preconditions的sh字段

  • 支持的命令:sh字段可运行你系统默认Shell(如bash、zsh)支持的所有命令,包括Shell内置命令(如test、[[ ]])、外部二进制工具(如which、grep),以及自定义脚本片段。
  • 判断逻辑:完全基于命令的退出码($?):
    • 命令返回0:前置条件“通过”,任务继续执行。
    • 命令返回非0:前置条件“不通过”,任务打印配置的msg并跳过执行。

你在普通Shell中的判断逻辑,对应到Taskfile就是把if内的条件放到preconditions的sh字段中,通过退出码控制任务是否执行。

内容的提问来源于stack exchange,提问作者Kokizzu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 17:50:33