Как можно эффективнее собирать данные от пользователей на виртуальной машине?

Как можно эффективнее собирать данные от пользователей на виртуальной машине?

Этим летом я преподаю курс. Первым заданием моих студентов будет установка созданной мной виртуальной машины (машина будет работать под управлением 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.

Кстати, было бы неплохо:

  1. Попросите также студенческий билет. По моему опыту, очень часто встречаются двойные фамилии (на самом деле, вам следует спросить «Family Name» (фамилия), а не «last name» (имя), потому что фамилия не всегда совпадает с фамилией).

  2. Измените тему на "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.

Связанный контент