improve output and error handling, use 1 script
authorIan Kelling <ian@iankelling.org>
Fri, 17 Jun 2016 08:14:58 +0000 (01:14 -0700)
committerIan Kelling <ian@iankelling.org>
Fri, 17 Jun 2016 08:15:19 +0000 (01:15 -0700)
README
logq
logq-function [deleted file]

diff --git a/README b/README
index b3829e2fd029748742db8d8360579ce2e911aaed..4c5077f533b87b0d955e4597ac4c6717105bcf42 100644 (file)
--- a/README
+++ b/README
@@ -1,12 +1,8 @@
-The main documentation is availiable via --help and near the top of any bash
-script files which sit next to this file.
+The main documentation is availiable via --help and near the top of the bash
+script file which sit next to this file.
 
-Files ending in -function are for sourcing then calling as a function. Files
-without -function are exactly the same except they are for calling as a script.
+The script file can be stripped of the last line and used as a function
+instead of a script.
 
-Patches, bugs, and any feedback is very welcome via gitorious or email to
+Patches, bugs, and any feedback is very welcome via email to
 Ian Kelling <ian@iankelling.org>.
-
-This program is also part of a collection of programs,
-https://gitorious.org/bash-programs-by-ian, which are unrelated except
-having the same author and being being bash programs.
diff --git a/logq b/logq
index bb987431c014e109258be9e2b193535fa54c40c0..ac49a8fa9fa933e8a7e62d19f375552e1d65109c 100755 (executable)
--- a/logq
+++ b/logq
@@ -3,11 +3,8 @@ 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."
+command, and log path. Tail log if there is a failure.
+Follows output format of logsave."
 
     if [[ $1 == --help || $1 == -h ]]; then
         echo "$help"
@@ -19,6 +16,7 @@ $help"
        return 1
     fi
 
+    # deliniate arguments, so spaces aren't ambiguous
     local index=0
     local x prettycommand
     for x in "$@"; do
@@ -26,24 +24,33 @@ $help"
         index=$(( index+1 ))
     done
 
-
     local file="$*"
-    file="$(mktemp -d)/${file//[^[:alnum:]]/}"
+    file="$(mktemp -d)/${file//[[:space:]\/]/_}"
+    # give us ~20 char filename max
+    file="${file:0:40}"
 
-    printf "%s\n%s\n\n" "log of $prettycommand" "$(date)" >"$file"
+    printf "%s\n%s\n\n" "Log of $prettycommand" "$(date)" >"$file"
+
+    if [[ $- != *x* ]]; then
+        echo "log $file = $@"
+    fi
 
     # 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
+    local logq_ret=$(
+        set +e
+        trap ERR
+        "$@" &>> "$file"
+        echo $?
+          )
+    printf "\n%s\n%s\n" "$(date)" "----------------" >> "$file"
+
+    if [[ $logq_ret != 0 ]]; then
+        x="tail -n 100 $file"
+        if [[ $- != *x* ]]; then
+            echo "logq failure. $x :"
+        fi
+        $x
+    fi
+    return $logq_ret
 }
 logq "$@"
diff --git a/logq-function b/logq-function
deleted file mode 100644 (file)
index afe722f..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/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
-}