X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=logq-function;h=2ae5dae47fb8ff3e14890e34760473b220837b47;hb=d05b05db1c99982622ee70186c02d54f7d5cb5f9;hp=afe722fbbeab25b79787fa918f08c2732768ddd5;hpb=b9e35010945b3c40b5f1cc485e575ee5a41c3ad2;p=log-quiet diff --git a/logq-function b/logq-function index afe722f..2ae5dae 100644 --- a/logq-function +++ b/logq-function @@ -1,48 +1,68 @@ #!/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. logq () { - local help="Usage: logq [-h|--help] COMMAND [ARG...] + 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" - return - fi - if [[ $# == 0 ]]; then - echo "error: need 1 or more arguments + if [[ $1 == --help || $1 == -h ]]; then + echo "$help" + return + fi + if [[ $# == 0 ]]; then + echo "error: need 1 or more arguments $help" - return 1 - fi + return 1 + fi - local index=0 - local x prettycommand - for x in "$@"; do - prettycommand+="[$index]$x " - index=$(( index+1 )) - done + # deliniate arguments, so spaces aren't ambiguous + local index=0 + local x prettycommand + for x in "$@"; do + prettycommand+="[$index]$x " + index=$(( index+1 )) + done + local file="$*" + file="$(mktemp -d)/${file//[[:space:]\/]/_}" + # give us ~20 char filename max + file="${file:0:40}" - local file="$*" - file="$(mktemp -d)/${file//[^[:alnum:]]/}" + 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 + # we will propagate any errors + local logq_ret=$( + set +e + trap ERR "$@" &>> "$file" - local ret=$? - [[ $e == *e* ]] && set -e + echo $? + ) + printf "\n%s\n%s\n" "$(date)" "----------------" >> "$file" - printf "\n%s\n%s\n%s" "----------------" "$(date)" "end of log" >>"$file" - - echo -n "\$?=$ret " - echo -n "$prettycommand" - echo "[log] $file" - return $ret + if [[ $logq_ret != 0 ]]; then + x="tail -n 100 $file" + if [[ $- != *x* ]]; then + echo "logq failure. $x :" + fi + $x + fi + return $logq_ret }