【问题标题】:Setting the current date into a variable in a Script in bash将当前日期设置为 bash 脚本中的变量
【发布时间】:2016-06-28 14:57:11
【问题描述】:

所以对于我的生活,我无法弄清楚为什么我的脚本不会将我的日期命令作为变量。我有一个脚本,每次收到消息时都会运行,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 似乎喜欢它试图读取变量但被截断或日期之间的空间和 + 引起了问题。

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

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

感谢您的宝贵时间 :-)

【问题讨论】:

  • 我看到的文档似乎表明:d=`date +"%Y%m%d"` 应该可以解决问题。你试过吗?
  • 设置UMASK 而不是摆弄chmod,或者更好的是,改变你的脚本,让它从标准输入中读取。

标签: bash date procmail


【解决方案1】:

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

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

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

【讨论】:

  • 欣赏它,没有意识到 Procmail 没有使用相同的语法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-16
  • 2019-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多