#!/usr/bin/env zsh emulate -L zsh setopt err_exit no_unset pipe_fail path_file=${1:-cleanup.path} mode=${2:-ok} workdir= cleanup() { local exit_status=$? if [[ -n ${workdir:-} && -d $workdir ]]; then rm -rf -- "$workdir" print -r -- "removed $workdir" fi return $exit_status } trap cleanup EXIT trap 'exit 130' INT trap 'exit 143' TERM workdir=$(mktemp -d) print -r -- "$workdir" > "$path_file" print -r -- "created $workdir" print -r -- "report data" > "$workdir/report.txt" if [[ $mode == fail ]]; then print -u2 -- "simulated failure" exit 1 fi if [[ $mode == wait ]]; then print -r -- "waiting for a signal" sleep 30 fi print -r -- "finished work"