xclock -digital -update 1 -face 'arial black-80:bold'
}
+inttrap() {
+ pid=$1
+ # just passing on -INT doesnt work.
+ kill -TERM $pid
+ sleep .05
+ if [[ ! -e /proc/$pid ]]; then
+ if [[ $old_int_trap ]]; then
+ $old_int_trap
+ else
+ trap INT
+ fi
+ fi
+}
+
_jrun() { # journal run. run args, log to journal, tail and grep the journal.
# Redirect all commands which might have stderr to stdout because of
# wrapping.
cmd_name=${1##*/}
systemd-cat -t "$cmd_name" "$@" 2>&1 &
pid=$!
- sedscript="/$pattern$cmd_name/p;/^.{16}[^ ]+ $cmd_name\[$pid]: $cmd_name: exiting with status [0-9]+\$/q"
+ old_int_trap="$(trap -p INT)"
+ # Note, just passing along INT wont actually stop it.
+ # Oddly, the log says ERROR: /script.sh returned 130
+ # but it continues on.
+ trap "inttrap $pid" INT
+ sedscript="/$pattern$cmd_name/p;/^.{16}[^ ]+ $cmd_name\[$pid]: ([^ ]*\/)?$cmd_name: exiting with status [0-9]+\$/q"
+ # debug:
+ #echo "sedscript: sed -nr '$sedscript'"
journalctl -S "4 seconds ago" -f |& sed -nr "$sedscript" 2>&1 &
jr_pid=$!
wait $pid 2>&1 || ret=$?
if (( $ret )); then
echo "$0: ERROR: $* returned $ret"
fi
- jobs %'journalctl -S "4 seconds ago" -f' &>/dev/null
ended=false
- # give it about 5 seconds to find the end of the log
- for (( i=0; i<20; i++ )); do
- if jobs %'journalctl -S "4 seconds ago" -f' &>/dev/null; then
- sleep .3 2>&1
+ # give it 4 seconds to find the end of the log
+ for (( i=0; i<80; i++ )); do
+ if [[ -e /proc/$jr_pid ]]; then
+ sleep .05 2>&1
else
ended=true
break
if ! $ended; then
kill $jr_pid 2>&1
fi
+ if [[ $old_int_trap ]]; then
+ $old_int_trap
+ else
+ trap INT
+ fi
+ return 0
}
jrun() {
# ditching stderr avoids the jobs status change output.
}
sm() {
- (( $# == 2 )) || return 1
- action=$1
- shift
- host=$1
- shift
- case $action in
- pull|push) : ;;
- *) return 1 ;;
- esac
c /
# run latest
install-my-scripts
- jrun -p btrbk switch-mail-host $action $host
+ jrun -p btrbk switch-mail-host "$@"
return $ret
}
m s nscd -i hosts
f=/etc/resolv.conf
echo $f:; ccat $f
- hr; m ser status dnsmasq | cat
+ # this will fail is dnsmasq is failed
+ hr; m ser status dnsmasq | cat || :
hr; s ss -lpn 'sport = 53'
#hr; echo dnsmasq is $(systemctl is-active dnsmasq)
f=/var/run/dnsmasq/resolv.conf
rcat() {
resolvcat | less
}
+reresolv() {
+ sudo nscd -i hosts
+ sudo systemctl restart dnsmasq
+}
# only run on MAIL_HOST. simpler to keep this on one system.
r2eadd() { # usage: name url
xevkb() { xev -event keyboard; }
+ziva() { e "toot! i love dancing. fart"; }
+
# * misc stuff
# from curl cheat.sh/:bash_completion