Esta tarefa do cron faz o que você especificou diariamente à meia-noite:
0 0 * * * script >/dev/null -c 'env TERM=vt100 mutt -F/dev/null -falerts -e "push <delete-pattern>[email protected]<enter><sync-mailbox>y<enter><exit>"' /dev/null
Vamos quebrar isso.
script -c 'cmd'
corre cmd
sob uma falsa pseudo-tty (pty), de modo que cmd
acha que tem um terminal com mobilidade de cursor e tal. Mutt precisa disso, mas seu trabalho no cron não pode ter isso. Script fornece o calço. O trabalho usual do script é gravar uma sessão de comando em um arquivo. Seu argumento final, /dev/null
, diz para gravar o registro no dispositivo nulo, já que você provavelmente não se importa com um monte de eventos curses replayable.
env TERM=vt100
... significa colocar um terminal vt100 no ambiente antes de executar o mutt. Você precisa disso porque as tarefas do cron não têm um tipo de terminal natural (já que elas não têm naturalmente um terminal).
Tudo o resto faz parte do mutt. Usamos -F/dev/null
para garantir que seu .muttrc
não seja lido. Não há nada de errado em lê-lo, mas mudanças em seu muttrc podem mudar a maneira como a interação com o mutt vai. É mais seguro, a longo prazo, usar apenas o padrão muttrc, que é o que o -F/dev/null
faz.
A opção -e
diz ao mutt o que fazer quando é executado. Os argumentos para -e
são comandos que você pode colocar em um arquivo muttrc: set
, alternatives
, bind
, hdr_order
, etc. Push
é um comando que "pressiona" pressionamentos de teclas no buffer do teclado , então o mutt interpreta o que segue como se você tivesse digitado.
Agora vamos ver as teclas virtuais.
<delete-pattern>[email protected]<enter>
equivale a pressionamentos de tecla [email protected]
mais ENTER, mas usa símbolos de vinculação de teclado em vez de pressionamentos de tecla reais. Essa é uma prática recomendada para macros e para pushes, porque ela isola seu script em relação a alterações de atalhos padrão ou pessoais. Você pode obter símbolos de ligação de chaves da ajuda interativa. Todos os nomes na coluna do meio (que você usa com a instrução bind
) são nomes de símbolos.
<sync-mailbox>
é equivalente a pressionar $
, novamente com o símbolo de chave em vez do pressionamento de tecla. y<enter>
responde ao "Tem certeza?" prompt.
Finalmente, <exit>
sai do mutt. Isso também encerra sua sessão script
e seu comando cron termina. O >/dev/null
, de costume com o cron, impede que qualquer ruído do cron assedie sua caixa de correio.
Observe que toda a string push
é citada! Isso é importante. Felizmente, só precisamos de duas camadas de citações, para que possamos usar aspas duplas dentro de singles sem nenhuma citação ridícula.