
Этим летом я преподаю курс. Первым заданием моих студентов будет установка созданной мной виртуальной машины (машина будет работать под управлением Ubuntu). После установки им нужно будет запустить следующий скрипт
$ 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!"
Скрипт записывает их фамилию и отправляет мне электронное письмо с уведомлением об установке машины.
Самое раздражающее здесь то, что я в итоге получу 30 писем и что мне придется разбирать всю эту информацию самому. Интересно, есть ли лучший способ собрать эти данные? В конечном счете, было бы здорово иметь скрипт bash, который добавляет каждую фамилию в файл csv, к которому я могу получить доступ.
Есть ли в Unix инструмент, предназначенный для решения подобных задач?
решение1
Поскольку, как вы говорите, это машина, которую вы создали, почему бы не смонтировать на ней общий диск (CIFS или NFS) и не выводить данные на него?
Это может быть полезно и для других нужд обмена файлами.
решение2
Существует несколько агентов доставки почты (MDA), которые могут фильтровать почту по различным критериям (включая Subject:
заголовок). Некоторые из наиболее распространенных из них:прокмейл,почтовая рассылка, ифильтр.
Я использовал procmail
десятилетиями. Чтобы отфильтровать почту с заголовком Subject: в отдельный почтовый ящик, я бы создал правило вроде этого в моем ~/.procmailrc
:
:0
* ^Subject: Class Update
class-update/
procmail
поддерживает как mbox
однофайловые почтовые ящики, так и Maildir
почтовые ящики с одним файлом на сообщение. В примере выше сообщение будет сохранено в папке Maildir с именем ~/Mail/class-update/
. Удалите завершающий символ /
, если вы предпочитаете формат mbox.
Кстати, было бы неплохо:
Попросите также студенческий билет. По моему опыту, очень часто встречаются двойные фамилии (на самом деле, вам следует спросить «Family Name» (фамилия), а не «last name» (имя), потому что фамилия не всегда совпадает с фамилией).
Измените тему на
"Class Update: $(timestamp) $name [$id]"
или подобную. Тогда вашимprocmail
(или другим правилам MDA) нужно будет только извлечь заголовок Subject: и можно будет выбросить (или, что еще лучше, архивировать в почтовый ящик) остальную часть сообщения.
Например, следующее правило procmail сохранит сообщение в папке, как указано выше, а затем извлечет заголовки Date: и Subject: и сохранит их в файл.
: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
}
К вашему сведению, formail
это инструмент форматирования писем, который поставляется с procmail
.