#!/bin/sh set -eu reap_proc() { local domn="${1}" local user="${2}" shift 2 local pid= local t=0 { read -r pid <~/".cache/offlineimap/Account-${domn}-${user}.pid"; } \ 2>/dev/null || return 0 while ps -p ${pid} -o cmd | grep -Fq offlineimap; do case ${t} in 0 | 10) kill ${pid} 1>/dev/null 2>&1 || return 0;; 20) return 1;; # Give up after 20 seconds. esac sleep 1 t=$((${t} + 1)) done return 0 } ping_srvr() { local user="${1}" local host="${2}" shift 2 # ping -c 1 -W 10 "${host}" || return 1 ssh -o ConnectTimeout=10 "${user}@${host}" exit 0 || return 1 return 0 } sync() { local domn="${1}" local user="${2}" local host="${3}" shift 3 reap_proc "${domn}" "${user}" || return 1 ping_srvr "${user}" "${host}" || return 1 offlineimap -a "${domn}-${user}" \ 1>>~/".cache/offlineimap/Account-${domn}-${user}.log" 2>&1 & printf '%d\n' ${!} >~/".cache/offlineimap/Account-${domn}-${user}.pid" } eval "$(keychain --noask --eval --quiet id_rsa)" #sync 'pehjota.net' 'pj' 'mail.pehjota.net' || : sync 'libiquity.com' 'patrick.mcdermott' 'mail.libiquity.com' || :