
Voy a dar un curso este verano. La primera tarea de mis alumnos será instalar una máquina virtual que creé (la máquina ejecutará Ubuntu). Tras la instalación, deben ejecutar el siguiente 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!"
El script registra su apellido y me envía un correo electrónico notificándome que instalaron la máquina.
Lo molesto aquí es que terminaré recibiendo 30 correos electrónicos y tendré que analizar toda esta información yo mismo. Me pregunto si existe una mejor manera de recopilar estos datos. En última instancia, sería fantástico tener un script bash que agregue cada apellido a un archivo csv al que pueda acceder.
¿Existe alguna herramienta en Unix diseñada para hacer este tipo de cosas?
Respuesta1
Dado que, como usted dice, es una máquina que usted creó, ¿por qué no montar una unidad compartida (CIFS o NFS) y enviarla?
Esto también puede resultar útil para otras necesidades de intercambio de archivos.
Respuesta2
Existen varios agentes de entrega de correo (MDA) que pueden filtrar el correo según varios criterios (incluido Subject:
el encabezado). Algunos de los más comunes soncorreo electrónico,buzón de correo, yfiltrar.
Lo he usado procmail
durante décadas. Para filtrar el correo con ese encabezado Asunto: en un buzón separado, crearía una regla como esta en mi ~/.procmailrc
:
:0
* ^Subject: Class Update
class-update/
procmail
admite mbox
buzones de correo de un solo archivo y Maildir
buzones de estilo de un archivo por mensaje. El ejemplo anterior almacenará el mensaje en una carpeta de Maildir llamada ~/Mail/class-update/
. Elimine el final /
si prefiere el formato mbox.
Por cierto, sería una buena idea:
Solicite también el carnet de estudiante. En mi experiencia, es muy común tener apellidos duplicados (en realidad, debes preguntar por "Apellido" en lugar de "apellido" o "apellido" porque el apellido no siempre es el apellido).
Cambie el tema a
"Class Update: $(timestamp) $name [$id]"
o similar. Entonces susprocmail
reglas (u otras MDA) solo necesitan extraer el encabezado Asunto: y pueden descartar (o mejor aún, archivar en un buzón) el resto del mensaje.
Por ejemplo, la siguiente regla de procmail guardará el mensaje en una carpeta como se indica arriba y luego extraerá los encabezados Fecha: y Asunto: y los guardará en un archivo.
: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 su información, formail
es una herramienta de formato de correo que viene con procmail
.