在 bash 的脚本中将当前日期设置为变量

Setting the current date into a variable in a Script in bash

所以我这辈子都弄不明白为什么我的脚本不会将我的日期命令作为变量。我有一个脚本,每次收到消息时 运行 和 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

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

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

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

我创建了各种文件,包括打印 MSG:(date)、MSG:(date 等。MSG:(date 似乎喜欢它尝试读取变量但被切断或 space 在 date 和 + 之间引起了问题。

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

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

感谢您的宝贵时间:-)

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

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

如果您想避免调用外部进程,From_ pseudo-header 包含许多架构上的新日期戳。