如何配置Taskwarrior在完成任务后自动运行bash脚本?
Taskwarrior 完成任务自动执行脚本分步设置指南
一、选择正确的钩子类型
要在任务标记为完成时触发脚本,使用post-modify钩子最合适——它会在任务被修改(包括执行task done标记完成)后触发,且能通过过滤条件精准匹配“任务完成”的场景。
二、分步设置步骤
创建钩子目录(若不存在)
Taskwarrior 默认读取~/.task/hooks/下的钩子脚本,先确保目录存在:mkdir -p ~/.task/hooks/编写钩子触发脚本
在钩子目录下创建脚本,命名必须遵循<钩子类型>.<自定义名称>格式,比如post-modify.run_completion_script:nano ~/.task/hooks/post-modify.run_completion_script写入以下内容(替换你的脚本路径):
#!/bin/bash # 仅当任务状态变为completed时执行目标脚本 task "$TASK_UUID" export | grep -q '"status":"completed"' if [ $? -eq 0 ]; then # 替换为你的bash脚本绝对路径 /full/path/to/your/script.sh fi说明:
TASK_UUID是Taskwarrior触发钩子时自动传入的环境变量,代表当前被修改的任务唯一标识;通过task export获取任务状态,过滤出完成状态的任务再执行脚本。赋予脚本可执行权限
钩子脚本必须具备执行权限才能被Taskwarrior调用:chmod +x ~/.task/hooks/post-modify.run_completion_script测试验证
随便选一个任务执行完成命令,验证脚本是否自动运行:task done <任务ID>若你的脚本有输出或操作,此时应该会自动触发。
三、额外注意事项
- 钩子脚本必须使用绝对路径调用你的目标脚本,避免Taskwarrior环境路径问题;
- 若需要在脚本中获取任务详情,可通过
task "$TASK_UUID" export输出JSON格式的任务数据,进一步处理; - 若要调试钩子,可在脚本中添加日志输出,比如
echo "触发完成钩子: $TASK_UUID" >> ~/task_hook.log,方便排查问题。
内容的提问来源于stack exchange,提问作者Matblanket
相关产品推荐
相关产品推荐

