在bash

时间:2016-06-28 14:57:12

标签: bash date procmail

因此,对于我的生活,我无法弄清楚为什么我的脚本不会将我的日期命令作为变量。我有一个脚本,每次收到消息时都会运行,procmail按主题行过滤特定消息。脚本如下所示:

d=$(date +%Y%m%d)

:0 wc
* ^(From|subject).*xxx
| cat&>/xx/xx/xx/xx/MSG:$d && \
chmod xxx /xx/xx/xx/xx/MSG:$d && \
/xx/xx/xx/otherscript.sh /xx/xx/xx/xx/MSG:$d

我已经在其他脚本中运行了date命令很多次,并且stdout没有任何问题,所以我想知道这是否是procmail问题?我已经看了几个不同的网站,但仍然没有找到解决方案。我的最终目标是每次收到新电子邮件时创建唯一的文件名以及组织目的。

我相信它与procmail有关的另一个原因是它在3个月前工作正常(没有更改任何文件或权限)。我甚至尝试了几种变体(只展示了一些例子):

 $'date +"%Y%m%d"'
 $(date)
 echo $(date)

我得到了各种各样的文件,其中包括打印MSG :(日期),MSG :(日期等等。味精:(日期似乎喜欢它试图读取变量但是被截断或日期之间的空格)和+导致问题。

在我的脚本结束时,我将它发送到另一个脚本,该脚本还创建了一个附加日期的新文件,它的工作正常:

fileOut="/xxx/xxx/xxx/xxx.$v.$(date +"%Y%m%d-%H%M%S").xxx"
prints: xxx.YH8AcFV9.20160628-090506.txt

感谢您的时间: - )

1 个答案:

答案 0 :(得分:1)

Procmail不支持现代POSIX shell命令替换语法;你需要使用反引号。

d=`date +%Y%m%d`  # or just date +%F

如果您想避免调用外部进程,From_伪标头在许多体系结构上都包含一个新的日期戳。