Skip to content

Instantly share code, notes, and snippets.

@evanrelf
Last active July 11, 2024 22:14
Show Gist options
  • Save evanrelf/d4c954ebbf1957250af3f860c2c03612 to your computer and use it in GitHub Desktop.
Save evanrelf/d4c954ebbf1957250af3f860c2c03612 to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
set -Eeuo pipefail
IFS=$'\n\t'
deferred=(true)
run_deferred() {
local status="$1"
abort() {
if [ "$status" != 0 ]; then
exit "$status"
fi
}
for cmd in "${deferred[@]}"; do
eval "$cmd" || abort
done
unset -f abort
}
trap 'run_deferred $?' EXIT
defer() {
local IFS=' '
deferred=("$*" "${deferred[@]}")
}
echo acquire1
defer echo release1
echo acquire2
defer echo 2esaeler \| rev
echo acquire3
defer echo -n release \; echo 3
failure() { echo "aborting"; false; }
defer failure
echo acquire4
defer "cat <(echo -n release && bc -e '(9 / 3) + 1')"
echo acquire5
defer release5
release5() { echo release5; }
echo "panicking"
false
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment