本文目录导读:

- 命令行/Terminal 脚本(Bash/PowerShell)
- 编程语言脚本
- 系统级方法
- CI/CD 脚本 (GitLab CI / Jenkins)
- 数据库/存储标记
- 图形界面脚本(AutoHotkey, AppleScript)
- 工作流管理工具
- 最佳实践建议
脚本标记任务完成状态的方法取决于你使用的具体环境(如操作系统、编程语言、项目管理系统等),以下是几种常见场景的实现方式:
命令行/Terminal 脚本(Bash/PowerShell)
Bash 脚本
#!/bin/bash
# 使用退出码标记状态
task_run() {
# 执行任务逻辑
if [ $? -eq 0 ]; then
echo "TASK_COMPLETED"
return 0
else
echo "TASK_FAILED"
return 1
fi
}
# 记录到日志文件
echo "$(date): Task completed" >> /var/log/tasks.log
PowerShell 脚本
# 使用 Write-Progress 或自定义状态
$taskResult = @{
Status = "Completed"
Timestamp = Get-Date
TaskName = "DataProcessing"
}
$taskResult | ConvertTo-Json | Out-File -Path "task_status.json"
编程语言脚本
Python 脚本
# 使用状态枚举
from enum import Enum
import json
class TaskStatus(Enum):
PENDING = "pending"
IN_PROGRESS = "in_progress"
COMPLETED = "completed"
FAILED = "failed"
def mark_task_completed(task_id):
status = {
"id": task_id,
"status": TaskStatus.COMPLETED.value,
"completed_at": datetime.now().isoformat()
}
# 保存到文件或数据库
with open("tasks_status.json", "w") as f:
json.dump(status, f)
mark_task_completed("task_001")
JavaScript (Node.js) 脚本
const fs = require('fs');
// 标记任务完成
function markTaskCompleted(taskId) {
const status = {
taskId,
status: 'completed',
timestamp: new Date().toISOString()
};
fs.writeFileSync(`task_${taskId}_status.json`, JSON.stringify(status));
}
系统级方法
文件标记法
# 创建状态文件
touch /tmp/task_completed_$(date +%s).flag
# 检查状态
if [ -f /tmp/task_completed*.flag ]; then
echo "任务已完成"
fi
环境变量标记
# 设置环境变量
export TASK_STATUS="completed"
# 子进程检查
if [ "$TASK_STATUS" = "completed" ]; then
echo "继续执行后续任务"
fi
CI/CD 脚本 (GitLab CI / Jenkins)
GitLab CI
job:
script:
- echo "Running task..."
- # 任务逻辑
- echo "TASK_COMPLETED" > status.txt
artifacts:
paths:
- status.txt
Jenkins Pipeline
pipeline {
stages {
stage('Task') {
steps {
script {
try {
sh 'run_task.sh'
currentBuild.result = 'SUCCESS'
} catch (Exception e) {
currentBuild.result = 'FAILURE'
}
}
}
}
}
}
数据库/存储标记
SQLite 示例
sqlite3 tasks.db "UPDATE tasks SET status='completed', completed_at=datetime('now') WHERE id=1;"
Redis 标记
redis-cli SET task:status:001 completed redis-cli EXPIRE task:status:001 86400 # 24小时后过期
图形界面脚本(AutoHotkey, AppleScript)
AutoHotkey (Windows)
; 创建任务完成标记 FileAppend, Task completed at %A_Now%`n, C:\Tasks\status.log ; 更新注册表 RegWrite, REG_SZ, HKEY_CURRENT_USER\Software\MyApp\Tasks, Task001, Completed
AppleScript (macOS)
-- 创建状态文件 do shell script "echo 'completed' > /tmp/task_status.txt" -- 通知中心 display notification "任务已完成" with title "任务状态"
工作流管理工具
Makefile
.PHONY: task
task:
@echo "执行任务..."
@touch $@.completed # 标记完成
task.completed: task
@echo "任务已在 $< 中完成"
注意清理:
clean:
rm -f *.completed
最佳实践建议
- 持久化标记:使用文件、数据库或状态服务,而不是仅依赖内存
- 原子性操作:避免并发写入导致状态混乱(使用文件锁或数据库事务)
- 状态可追溯:记录时间戳、任务ID、执行环境等信息
- 错误处理:标记失败状态时记录错误原因
- 幂等性:重复标记操作不应产生副作用
选择哪种方法取决于:
- 任务的复杂度和持久性需求
- 是否需要跨系统/跨网络共享状态
- 是否要求实时监控和通知
如果有具体的脚本环境或使用场景,可以提供更精确的实现方案!