# mail related
etail() {
+ ngset
+ tail -F /var/log/exim4/mainlog /var/log/exim4/*main /var/log/exim4/paniclog /var/log/exim4/*panic -n 200 "$@"
+ ngreset
+}
+etailm() {
tail -F /var/log/exim4/mainlog -n 200 "$@"
}
etail2() {
tail -F /var/log/exim4/mymain -n 200 "$@"
}
-
ccomp tail etail etail2
+
+
+
# print exim old pids
eoldpids() {
local configtime pid piduptime now daemonpid
ifn() {
# insensitive find
+ # -L = follow symlinks
find -L . -not \( -name .svn -prune -o -name .git -prune \
-o -name .hg -prune -o -name .editor-backups -prune \
-o -name .undo-tree-history -prune \) -iname "*$**" 2>/dev/null
esac
}
+
+ngset() {
+ if shopt nullglob >/dev/null; then
+ ngreset=false
+ else
+ shopt -s nullglob
+ ngreset=true
+ fi
+}
+ngreset() {
+ if $ngreset; then
+ shopt -u nullglob
+ fi
+}
+
nopanic() {
# shellcheck disable=SC2024
- sudo tee -a /var/log/exim4/paniclog-archive </var/log/exim4/paniclog; sudo truncate -s0 /var/log/exim4/paniclog
+ ngset
+ for f in /var/log/exim4/paniclog /var/log/exim4/*panic; do
+ base=${f##*/}
+ if [[ -s $f ]]; then
+ echo ================== $f =============
+ s tee -a /var/log/exim4/$base-archive <$f
+ s truncate -s0 $f
+ fi
+ done
+ ngreset
}
p8() { ping "$@" 8.8.8.8; }
m() { printf "%s\n" "$*"; "$@"; }
+# update file. note: duplicated in mail-setup
+u() {
+ local tmp tmpdir dest="$1"
+ local base="${dest##*/}"
+ local dir="${dest%/*}"
+ if [[ $dir != "$base" ]]; then
+ # dest has a directory component
+ mkdir -p "$dir"
+ fi
+ ur=false # u result
+ tmpdir=$(mktemp -d)
+ cat >$tmpdir/"$base"
+ tmp=$(rsync -ic $tmpdir/"$base" "$dest")
+ if [[ $tmp ]]; then
+ printf "%s\n" "$tmp"
+ ur=true
+ if [[ $dest == /etc/systemd/system/* ]]; then
+ reload=true
+ fi
+ fi
+ rm -rf $tmpdir
+}
+
+
uptime() {
if type -p uprecords &>/dev/null; then
uprecords -B
fi
}
+
+# * spark
+# spark 1 5 22 13 53
+# # => ▁▁▃▂▇
+
+# The MIT License
+# Copyright (c) Zach Holman, https://zachholman.com
+# https://github.com/holman/spark
+
+# As of 2022-10-28, I reviewed github forks that had several newer
+# commits, none had anything interesting. I did a little refactoring
+# mostly to fix emacs indent bug.
+
+# Generates sparklines.
+_spark_echo()
+{
+ if [ "X$1" = "X-n" ]; then
+ shift
+ printf "%s" "$*"
+ else
+ printf "%s\n" "$*"
+ fi
+}
+
+
+spark()
+{
+ local f tc
+ local n numbers=
+
+ # find min/max values
+ local min=0xffffffff max=0
+
+ for n in ${@//,/ }
+ do
+ # on Linux (or with bash4) we could use `printf %.0f $n` here to
+ # round the number but that doesn't work on OS X (bash3) nor does
+ # `awk '{printf "%.0f",$1}' <<< $n` work, so just cut it off
+ n=${n%.*}
+ (( n < min )) && min=$n
+ (( n > max )) && max=$n
+ numbers=$numbers${numbers:+ }$n
+ done
+
+ # print ticks
+ local ticks=(▁ ▂ ▃ ▄ ▅ ▆ ▇ █)
+
+ # use a high tick if data is constant
+ (( min == max )) && ticks=(▅ ▆)
+
+ tc=${#ticks[@]}
+ f=$(( ( (max-min) <<8)/( tc - 1) ))
+ (( f < 1 )) && f=1
+
+ for n in $numbers
+ do
+ _spark_echo -n ${ticks[$(( ((($n-$min)<<8)/$f) ))]}
+ done
+ _spark_echo
+}
+
+
# * misc stuff