
Estou ministrando um curso neste verão. A primeira tarefa dos meus alunos será instalar uma máquina virtual que criei (a máquina rodará Ubuntu). Após a instalação, eles devem executar o seguinte script
$ cat ~/bin/all-done
#!/bin/bash
timestamp() {
date +"%Y-%m-%d_%H-%M-%S"
}
echo "Type your last name: "
read name
SUBJECT="Class Update"
TO="my_email@my_domain.com"
MESSAGE="/tmp/message.txt"
echo "$name completed the assignment" >> $MESSAGE
echo "Time: $(timestamp)" >> $MESSAGE
/usr/bin/mail -s "$SUBJECT" "$TO" < $MESSAGE
rm $MESSAGE
echo "You completed the first assignment. Welcome to the class!"
O script registra o sobrenome e me envia um e-mail avisando que instalaram a máquina.
A parte chata aqui é que acabarei recebendo 30 e-mails e terei que analisar todas essas informações sozinho. Estou me perguntando se existe uma maneira melhor de coletar esses dados. Por fim, seria ótimo ter um script bash que anexe cada sobrenome a um arquivo csv que eu possa acessar.
Existe uma ferramenta no Unix projetada para fazer esse tipo de coisa?
Responder1
Já que, como você disse, é uma máquina que você criou, por que não montar uma unidade compartilhada (CIFS ou NFS) e enviar para ela?
Isso também pode ser útil para outras necessidades de compartilhamento de arquivos.
Responder2
Existem vários Mail Delivery Agents (MDA) que podem filtrar mensagens por vários critérios (incluindo Subject:
cabeçalho). Alguns dos mais comuns sãoprocmail,correio, efiltro.
Eu uso procmail
há décadas. Para filtrar mensagens com esse cabeçalho Subject: em uma caixa de correio separada, eu criaria uma regra como esta em meu ~/.procmailrc
:
:0
* ^Subject: Class Update
class-update/
procmail
suporta mbox
caixas de correio de arquivo único e Maildir
caixas de correio de estilo de um arquivo por mensagem. O exemplo acima irá armazenar a mensagem em uma pasta Maildir chamada ~/Mail/class-update/
. Remova o final /
se preferir o formato mbox.
Aliás, seria uma boa ideia:
Peça também a carteira de estudante. Na minha experiência, é extremamente comum ter sobrenomes duplicados (na verdade, você deve pedir “Nome de família” em vez de “sobrenome” ou “sobrenome” porque o sobrenome nem sempre é o sobrenome).
Mude o assunto para
"Class Update: $(timestamp) $name [$id]"
ou similar. Então, suasprocmail
regras (ou outras regras do MDA) precisam apenas extrair o cabeçalho Subject: e podem descartar (ou melhor ainda, arquivar em uma caixa de correio) o restante da mensagem.
Por exemplo, a seguinte regra procmail salvará a mensagem em uma pasta como acima e, em seguida, extrairá os cabeçalhos Data: e Assunto: e os salvará em um arquivo.
:0
* ^Subject: Class Update
{
# first save a copy of the message (for a safety archive)
:0c
class-update/
# then extract the Subject line and save it to a file
:0 fw
| formail -c -xSubject | sed -e 's/^Class Update: //' \
>> /path/to/class-updates.txt
}
Para sua informação, formail
é uma ferramenta de formatação de e-mail que vem com o procmail
.