intemp.sh 867 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #!/usr/bin/env bash
  2. # Runs the supplied bash command string in a temporary workspace directory.
  3. # Usage: intemp.sh [-t prefix] <command>
  4. # Requires: mktemp
  5. set -o errexit
  6. set -o nounset
  7. set -o pipefail
  8. opt_flag=${1:-}
  9. [ -z "${opt_flag}" ] && echo "No command supplied" >&2 && exit 1
  10. if [ "${opt_flag}" == "-t" ]; then
  11. shift
  12. prefix=${1:-}
  13. [ -z "${prefix}" ] && echo "No prefix supplied" >&2 && exit 1
  14. shift
  15. else
  16. prefix='temp'
  17. fi
  18. cmd="$1"
  19. [ -z "${cmd}" ] && echo "No command supplied" >&2 && exit 1
  20. workspace=$(mktemp -d "${TMPDIR:-/tmp}/${prefix}.XXXXXX")
  21. echo "Workspace created: ${workspace}" 1>&2
  22. cleanup() {
  23. local -r workspace="$1"
  24. rm -rf "${workspace}"
  25. echo "Workspace deleted: ${workspace}" 1>&2
  26. }
  27. trap "cleanup '${workspace}'" EXIT
  28. pushd "${workspace}" > /dev/null
  29. bash -ceu "${cmd}"
  30. popd > /dev/null
  31. trap - EXIT
  32. cleanup "${workspace}"