Get the FREE Ultimate OpenClaw Setup Guide →

trap-handler-generator

npx machina-cli add skill a5c-ai/babysitter/trap-handler-generator --openclaw
Files (1)
SKILL.md
1.8 KB

Trap Handler Generator

Generate trap handlers for shell scripts.

Capabilities

  • Generate cleanup trap handlers
  • Implement signal handling
  • Create graceful shutdown logic
  • Set up resource cleanup
  • Handle nested traps
  • Generate error handlers

Generated Patterns

#!/usr/bin/env bash

# Temporary resources to clean up
declare -a CLEANUP_ITEMS=()
CLEANUP_DONE=false

# Register cleanup item
register_cleanup() {
    CLEANUP_ITEMS+=("$1")
}

# Cleanup function
cleanup() {
    if [[ "$CLEANUP_DONE" == true ]]; then
        return
    fi
    CLEANUP_DONE=true

    local exit_code=$?
    echo "Cleaning up..."

    for item in "${CLEANUP_ITEMS[@]}"; do
        if [[ -d "$item" ]]; then
            rm -rf "$item" 2>/dev/null
        elif [[ -f "$item" ]]; then
            rm -f "$item" 2>/dev/null
        elif [[ -n "$item" ]]; then
            # Command to run
            eval "$item" 2>/dev/null
        fi
    done

    return $exit_code
}

# Error handler
on_error() {
    local exit_code=$?
    local line_no=$1
    echo "Error on line ${line_no}: command exited with ${exit_code}" >&2
    cleanup
    exit $exit_code
}

# Signal handlers
on_sigint() {
    echo -e "\nInterrupted by user"
    cleanup
    exit 130
}

on_sigterm() {
    echo "Terminated"
    cleanup
    exit 143
}

# Set up traps
trap cleanup EXIT
trap 'on_error ${LINENO}' ERR
trap on_sigint INT
trap on_sigterm TERM

# Usage
TEMP_DIR=$(mktemp -d)
register_cleanup "$TEMP_DIR"

TEMP_FILE=$(mktemp)
register_cleanup "$TEMP_FILE"

register_cleanup "docker stop mycontainer"

Target Processes

  • shell-script-development
  • error-handling-user-feedback
  • cross-platform-cli-compatibility

Source

git clone https://github.com/a5c-ai/babysitter/blob/main/plugins/babysitter/skills/babysit/process/specializations/cli-mcp-development/skills/trap-handler-generator/SKILL.mdView on GitHub

Overview

Generates a reusable Bash pattern that automates cleanup, signal handling, and graceful shutdown in shell scripts. It defines a registry for cleanup items, a centralized cleanup function, error handling, and trap bindings to ensure resources are released on exit or error.

How This Skill Works

Outputs a Bash scaffold with a CLEANUP_ITEMS array, a register_cleanup function, and a cleanup function that loops over items to remove dirs/files or run commands. It also provides on_error, on_sigint, and on_sigterm handlers and wires them to EXIT, ERR, INT, and TERM traps.

When to Use It

  • Building long-running shell scripts that allocate temporary resources
  • Creating CLI tools that must clean up temp files on exit
  • Handling user interrupts (Ctrl+C) gracefully
  • Ensuring robust error reporting with cleanup on failures
  • Developing cross-platform shell scripts with consistent cleanup behavior

Quick Start

  1. Step 1: Define CLEANUP_ITEMS and register_cleanup in your script
  2. Step 2: Implement cleanup, on_error, on_sigint, on_sigterm, and traps
  3. Step 3: Create resources with mktemp, register them, and test cleanup on exit

Best Practices

  • Register all resources with register_cleanup immediately after creation
  • Keep cleanup idempotent with a CLEANUP_DONE guard to prevent double runs
  • Use mktemp for temp dirs/files and register them for cleanup
  • Prefer cleanup-driven exits over ad-hoc termination logic
  • Test with ERR traps to verify cleanup paths and messages

Example Use Cases

  • Temp directory created with mktemp -d and registered for cleanup
  • Temp file created and registered for removal on exit
  • Registering a command like 'docker stop mycontainer' as a cleanup item
  • Error handler that logs the issue, runs cleanup, and exits with the original code
  • Signal handling for SIGINT and SIGTERM to trigger cleanup before exit

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers