今年夏天我正在教一门课程。我的学生的第一个作业是安装我创建的虚拟机(该机器将运行 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
几十年了。要将带有“主题:”标头的邮件过滤到单独的邮箱中,我将在我的中创建如下规则~/.procmailrc
:
:0
* ^Subject: Class Update
class-update/
procmail
支持mbox
单文件邮箱和Maildir
每封邮件一个文件的邮箱。上面的示例将把邮件存储在名为 的 Maildir 文件夹中~/Mail/class-update/
。/
如果您喜欢 mbox 格式,请删除尾随。
顺便说一句,最好:
还要索要学生证。根据我的经验,重复姓氏是非常常见的(实际上,您应该询问“姓氏”而不是“姓氏”或“姓氏”,因为姓氏并不总是姓氏)。
将主题更改为
"Class Update: $(timestamp) $name [$id]"
或类似。然后,您的procmail
(或其他 MDA)规则只需要提取主题:标头,并可以丢弃(或者更好的是,存档到邮箱)邮件的其余部分。
例如,以下 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
.