license headers
[log-quiet] / logq
1 #!/bin/bash
2 # Copyright (C) 2014-2016 Ian Kelling
3
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
7
8 # http://www.apache.org/licenses/LICENSE-2.0
9
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15
16 # This file is exactly the same as logq-function except the last line
17 # to make it into a script.
18 logq () {
19 local help="Usage: logq [-h|--help] COMMAND [ARG...]
20
21 Log to temp file, output tail of log in case of error.
22
23 Run COMMAND with ARGs. Output return code, command, and log path. Tail
24 log if there is a failure. Follows output format of logsave."
25
26 if [[ $1 == --help || $1 == -h ]]; then
27 echo "$help"
28 return
29 fi
30 if [[ $# == 0 ]]; then
31 echo "error: need 1 or more arguments
32 $help"
33 return 1
34 fi
35
36 # deliniate arguments, so spaces aren't ambiguous
37 local index=0
38 local x prettycommand
39 for x in "$@"; do
40 prettycommand+="[$index]$x "
41 index=$(( index+1 ))
42 done
43
44 local file="$*"
45 file="$(mktemp -d)/${file//[[:space:]\/]/_}"
46 # give us ~20 char filename max
47 file="${file:0:40}"
48
49 printf "%s\n%s\n\n" "Log of $prettycommand" "$(date)" >"$file"
50
51 if [[ $- != *x* ]]; then
52 echo "log $file = $@"
53 fi
54
55 # we will propagate any errors
56 local logq_ret=$(
57 set +e
58 trap ERR
59 "$@" &>> "$file"
60 echo $?
61 )
62 printf "\n%s\n%s\n" "$(date)" "----------------" >> "$file"
63
64 if [[ $logq_ret != 0 ]]; then
65 x="tail -n 100 $file"
66 if [[ $- != *x* ]]; then
67 echo "logq failure. $x :"
68 fi
69 $x
70 fi
71 return $logq_ret
72 }
73 logq "$@"