#!/usr/bin/env bash set -u set -o pipefail export LC_ALL=C # Own a new directory; verify physical paths before cleanup. parent=$(cd -- "${TMPDIR:-/tmp}" && pwd -P) || exit 1 work=$(mktemp -d "$parent/bhylu-bash.XXXXXX") || exit 1 work=$(cd -- "$work" && pwd -P) || exit 1 case "$work" in "$parent"/bhylu-bash.??????) ;; *) exit 1 ;; esac cleanup() { cd -- "$parent" || return 1 [[ -d $work && ! -L $work ]] || return 1 [[ $(cd -- "$work" && pwd -P) == "$work" ]] || return 1 case "$work" in "$parent"/bhylu-bash.??????) rm -r -- "$work" ;; *) return 1 ;; esac } trap cleanup EXIT cd -- "$work" || exit 1 printf "state=draft\nstate=ready\n" > states.txt sed 's/^state=draft$/state=review/' states.txt > reviewed.txt [[ $(head -n 1 states.txt) == "state=draft" ]] || exit 1 cat -- reviewed.txt