#!/bin/bash logq () { local help="Usage: logq [-h|--help] COMMAND [ARG...] Log Quietly. Run COMMAND with ARGs, log to temp file. Output return code, command, and log path. Minor details: Use logsave if available, which adds informational header/footer to log file. Logfile is put in random temp dir, with filename made from the alphanumeric characters of COMMAND + ARGs." if [[ $1 == --help || $1 == -h ]]; then echo "$help" return fi if [[ $# == 0 ]]; then echo "error: need 1 or more arguments $help" return 1 fi local index=0 local x prettycommand for x in "$@"; do prettycommand+="[$index]$x " index=$(( index+1 )) done local file="$*" file="$(mktemp -d)/${file//[^[:alnum:]]/}" printf "%s\n%s\n\n" "log of $prettycommand" "$(date)" >"$file" # we will propagate any errors local e=$- [[ $e == *e* ]] && set +e "$@" &>> "$file" local ret=$? [[ $e == *e* ]] && set -e printf "\n%s\n%s\n%s" "----------------" "$(date)" "end of log" >>"$file" echo -n "\$?=$ret " echo -n "$prettycommand" echo "[log] $file" return $ret } logq "$@"