我有一封希望从procmail发送到bash脚本的衬垫邮件。我只希望身体被发送,没有别的。
目前我的.procmailrc
看起来像这样:
:0
*^ Subject.*Xecute Command$
{
:0 bf
| /bin/bash /path/to/script
}
我的Bash脚本很简单:
#!/bin/bash
echo -e "\rLT 4>$0\r\r" > /dev/ttyS1
我无法从任何地方获得任何输入或输出。
任何指针?
答案 0 :(得分:1)
如果打算在电子邮件中添加一些装饰并将其打印到串口(?),请尝试使用
之类的配方:0b
*^ Subject.*Xecute Command$
| ( printf '\rLT 4>'; cat -; printf '\r\r' ) > /dev/ttyS1
如果条件匹配,b
标志适用于操作行,因此您不需要大括号和新的无条件配方; the f
flag makes no sense at all in this context。 (虽然如果要保留消息以进行进一步处理,您需要添加c
标记。)
此外,对于记录,Bash中的$0
是当前正在运行的脚本的名称(如果没有运行脚本,则为bash
本身),$@
是列表命令行参数。但是当Procmail将消息传递给脚本时,它不会使用其中任何一个;它只是在标准输入上提供。
如果你想在外部脚本中执行操作,那当然也没关系;但是像这样的简单动作可能更好地内联编写。如果脚本文件是可执行的并且具有适当的shebang,则您不希望或不需要明确指定bash
;有一个shebang的原因是让脚本自成一体。
在回复评论时,这是一个简单的Perl脚本,用于提取第一个身体部位的第一行,并执行替换。
perl -nle 'next if 1../^$/;
s/\<foo\>/bar/g;
print "\rLT 4>$_\r\r"; exit(0)'
如果您sed
了解sed
,\r
也不难做到这一点。
答案 1 :(得分:0)
写下你的脚本:
{
echo -e "\rLT 4>"
cat
echo -e "\r\r"
} > /dev/ttyS1
答案 2 :(得分:0)
formail是你的朋友! 将消息传递到:
:0
*^ Subject.*Xecute Command$
| formail -I "" | your-bash-script