stop returning 1. use pipefail if needed
[log-quiet] / logq
diff --git a/logq b/logq
index bb987431c014e109258be9e2b193535fa54c40c0..b253bef510416c8f9a256b2d2599d090ae81b27c 100755 (executable)
--- a/logq
+++ b/logq
@@ -1,13 +1,27 @@
 #!/bin/bash
+# Copyright (C) 2014-2016 Ian Kelling
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+#     http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This file is exactly the same as logq-function except the last line
+# to make it into a script.
 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.
+Log to temp file, output tail of log in case of error.
 
-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."
+Run COMMAND with ARGs. Output return code, 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 +33,7 @@ $help"
        return 1
     fi
 
+    # deliniate arguments, so spaces aren't ambiguous
     local index=0
     local x prettycommand
     for x in "$@"; do
@@ -26,24 +41,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 "$@"