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
我必须在安装包之前执行一些必要的步骤,例如备份以前的数据存储快照。 为此,我使用如下的 %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