Seu comando
at -f ${sleepTimes[$i]} showRestNotification
instrui at
a executar ${sleepTimes[$i]}
no tempo showRestNotification
.
- A especificação de horário é ilegível, ou seja, não está em um formato reconhecível por
at
em seu sistema. -
at
lê a entrada padrão (ou de um arquivo quando-f
é usado).
Você precisará ler a documentação do at
em seu sistema para ver em qual formato a especificação de tempo precisa estar. No meu sistema (não no Linux), ele diz que deve estar no formato [[cc]yy]mmddHHMM[.SS]
, ou seja 201705061915
para 19:15 a 6 de maio de 2017.
Além disso, como at
lê os comandos para executar a partir da entrada padrão (ou de um arquivo quando -f
é usado), você precisará fornecer um script de shell que contenha a definição da função que deseja executar, juntamente com a chamada correta para ele, por exemplo:
#/bin/sh
# this is "job.sh"
showRestNotification () {
# ...
}
showRestNotification
Então,
at -f job.sh -t 201705061915
ou
at 201705061915 <job.sh
Como at
executará o arquivo especificado usando /bin/sh
, será necessário invocar um script bash
contendo a definição da função e a invocação de job.sh
se você desejar usar as construções de shell bash
-specific.
Uma sugestão de portabilidade para o seu código:
date () {
case "$OSTYPE" in
darwin*) command gdate "$@" ;;
linux*) command date "$@" ;;
*) printf 'Unsupported OS type: %s\n' "$OSTYPE" >&2
exit 1 ;;
esac
}
Depois é só usar
sleepTimes[$i]="$(date -d "${sleepTimes[$i+1]} - 1 hour" +"%Y%m%d%H%M")"
sem ter que testar $OSTYPE
em todo o lugar.