trap-handler-generator
npx machina-cli add skill a5c-ai/babysitter/trap-handler-generator --openclawFiles (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
- Step 1: Define CLEANUP_ITEMS and register_cleanup in your script
- Step 2: Implement cleanup, on_error, on_sigint, on_sigterm, and traps
- 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