date 命令在使用内部 rpm 规范文件时给出错误的输出

date command is giving erroneous output while using inside rpm spec file

我必须在安装包之前执行一些必要的步骤,例如备份以前的数据存储快照。 为此,我使用如下的 %pre 脚本。

%pre
#!/bin/sh
--------
--------
stamp=`date +%Y%m%d%H%M%S`
echo ${stamp}
-------------
-------------

输出如下:20161103123325OURCE 它正在打印一些随机字符和日期。 "OURCE" 没有出现在我的规范文件中。

相同的脚本独立运行时效果很好。平台为CentOS7.

rpmbuild 知道一整套宏。显然某个宏被定义为:

%S = %SOURCE

我没能找到告诉 rpmbuild 不要扩展那个宏的东西;但有一种方法可以诱使他不这样做。我知道这是一个小的解决方法,但这是我能想到的最好的方法:

stamp=$(date '+%Y%m%d%H%M%''S')
  • 请注意,我用推荐的 $() 调用替换了反引号
  • 我刚刚插入了两个''来将字符串分成两部分;这避免了宏替换。

如果您按照以下 link 中的描述使用第二个百分号“%%”转义日期命令中的百分号“%”,这应该会更正您在扩展 %S 时看到的行为到 "OURCE" 正如您在输出中看到的那样。

    stamp=`date +%%Y%%m%%d%%H%%M%%S`

请参阅此处的 "Writing a Macro" 部分 http://rpm.org/user_doc/macros.html