12345678910111213141516171819202122232425262728 |
- #!/usr/bin/env bash
- # echo a command and eval it.
- # Can also print the command to a file.
- set -e
- a=
- while getopts a OPT; do
- case "$OPT" in
- a)
- # Append to file instead of overwriting.
- a=-a
- ;;
- ?)
- exit 2
- ;;
- esac
- done
- shift "$(($OPTIND - 1))"
- cmd="$1"
- outfile="${2:-/dev/null}"
- mkdir -p "$(dirname "$outfile")"
- echo "$cmd" | tee $a "$outfile"
- # PIPESTATUS so that cmd="main_cmd | post_process" will return the status of cmd.
- # Not POSIX.
- # https://unix.stackexchange.com/questions/14270/get-exit-status-of-process-thats-piped-to-another
- # https://stackoverflow.com/questions/1221833/pipe-output-and-capture-exit-status-in-bash
- eval "${cmd}; cmd_exit=\${PIPESTATUS[0]}"
- exit "$cmd_exit"
|