apache license, improve docs
[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 logq () {
16 local help="Usage: logq [-h|--help] COMMAND [ARG...]
17
18 Log to temp file, output tail of log in case of error.
19
20 Run COMMAND with ARGs. Output return code, command, and log path. Tail
21 log if there is a failure. Follows output format of logsave."
22
23 if [[ $1 == --help || $1 == -h ]]; then
24 echo "$help"
25 return
26 fi
27 if [[ $# == 0 ]]; then
28 echo "error: need 1 or more arguments
29 $help"
30 return 1
31 fi
32
33 # deliniate arguments, so spaces aren't ambiguous
34 local index=0
35 local x prettycommand
36 for x in "$@"; do
37 prettycommand+="[$index]$x "
38 index=$(( index+1 ))
39 done
40
41 local file="$*"
42 file="$(mktemp -d)/${file//[[:space:]\/]/_}"
43 # give us ~20 char filename max
44 file="${file:0:40}"
45
46 printf "%s\n%s\n\n" "Log of $prettycommand" "$(date)" >"$file"
47
48 if [[ $- != *x* ]]; then
49 echo "log $file = $@"
50 fi
51
52 # we will propagate any errors
53 local logq_ret=$(
54 set +e
55 trap ERR
56 "$@" &>> "$file"
57 echo $?
58 )
59 printf "\n%s\n%s\n" "$(date)" "----------------" >> "$file"
60
61 if [[ $logq_ret != 0 ]]; then
62 x="tail -n 100 $file"
63 if [[ $- != *x* ]]; then
64 echo "logq failure. $x :"
65 fi
66 $x
67 fi
68 return $logq_ret
69 }
70 logq "$@"