#! /bin/sh # usage: with-tmpdir [-t TEMPLATE] COMMAND [ARGS...] # see mktemp(1) for TEMPLATE set -efu template=with-tmpdir.XXXXXXXX case $1 in -t) template=$2; shift 2;; esac TMPDIR=$(mktemp -dt "$template") # make sure $TMPDIR exists and is a directory (cd "$TMPDIR") cleanup() { # ensure $PWD != $TMPDIR cd / rm -fR "$TMPDIR" } trap 'cleanup; trap - EXIT INT QUIT' \ EXIT INT QUIT export TMPDIR "$@"