如何为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
相关产品推荐
相关产品推荐

