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