Você pode fazer isso com um sinal trap e executando o modo de espera & & matar no fundo:
$ cat monitor.sh
# monitor stuff in the background
# ensure this file is sourced, not executed: http://mywiki.wooledge.org/BashFAQ/109
sourced() { [[ ${FUNCNAME[1]} == "source" ]]; }
sourced || { echo "source me"; exit 1; }
unset -f sourced
__MY_PID=$$
trap __usr1_trap USR1
__usr1_trap() {
dirs -l >| /tmp/test/dirs_record
jobs >| /tmp/test/jobs_record
__schedule_trap &
}
__schedule_trap() {
sleep 60
kill -USR1 $__MY_PID
}
# trigger the signal handler, which will reschedule itself
kill -USR1 $__MY_PID
Inicie com . /path/to/monitor.sh
Observe que eu uso >|
como o operador de redirecionamento no manipulador de sinal porque eu corro com set -o noclobber
para evitar a substituição acidental de arquivos: aqui queremos sobrescrever os arquivos propositalmente.