123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- #! /usr/bin/env bash
-
- export __BASH_HOOKS_TIMEOUT__=60
-
- export __BASH_HOOKS_COMMAND__=
- export __BASH_HOOKS_TIME__=
-
- timestamp()
- {
- date "+%s"
- }
-
- preexec()
- {
- export __BASH_HOOKS_COMMAND__="$1"
- export __BASH_HOOKS_TIME__=$(timestamp)
-
- }
-
- precmd()
- {
- if [ -n "$__BASH_HOOKS_COMMAND__" ]
- then
- ts=$(timestamp)
- diff=$(($ts - $__BASH_HOOKS_TIME__))
- __bash_hooks_command_finished "$__BASH_HOOKS_COMMAND__" $diff
- export __BASH_HOOKS_COMMAND__=
- export __BASH_HOOKS_TIME__=
- fi
- }
-
- displaytime()
- {
- local T=$1
- local D=$((T/60/60/24))
- local H=$((T/60/60%24))
- local M=$((T/60%60))
- local S=$((T%60))
- [[ $D > 0 ]] && printf '%d days ' $D
- [[ $H > 0 ]] && printf '%d hours ' $H
- [[ $M > 0 ]] && printf '%d minutes ' $M
- [[ $D > 0 || $H > 0 || $M > 0 ]] && printf 'and '
- printf '%d seconds\n' $S
- }
-
- __bash_hooks_command_finished()
- {
- if [ "$2" -ge "$__BASH_HOOKS_TIMEOUT__" ]
- then
- send_notif=1
- while read exp
- do
- if [ $(echo "${1}" | grep -c "${exp}") -ge 1 ]
- then
- send_notif=0
- fi
- done < ~/.nma_exclude
-
- human=$(displaytime "$2")
- text="Command \"$1\" finished in $human ($2 seconds)"
- if [ ${send_notif} -eq 1 ]
- then
- text="${text} (notified)"
- fi
- echo "$text"
-
- if [ ${send_notif} -eq 1 ]
- then
- (nma $(hostname -f) "$1" "$text" >/dev/null 2>/dev/null &)
- fi
- fi
- }
|