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

0yycz8jy  于 5个月前  发布在  Linux
关注(0)|答案(3)|浏览(60)

在安装我的软件包之前,我必须执行一些必要的步骤,比如备份以前的快照。为此,我使用了如下的%pre脚本。

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

字符串
输出如下:20161103123325 OURCE它正在打印一些随机字符沿着日期。“OURCE”在我的spec文件中不存在。
同样的脚本可以完美地作为独立的。平台是CentOS 7。

oipij1gg

oipij1gg1#

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

%S = %SOURCE

字符串
我没有找到告诉rpmbuild不要扩展那个宏的东西;但是有一种方法可以欺骗他不要这样做。我知道这是一个小小的变通方法,但这是我能想到的最好的方法:

stamp=$(date '+%Y%m%d%H%M%''S')

  • 请注意,我将反引号替换为推荐的$()调用
  • 我只是插入了两个''来将字符串分成两部分;这避免了宏替换。
amrnrhlw

amrnrhlw2#

如果您在日期命令中使用第二个百分比符号'%%'转义百分比'%',如以下链接所述,则应更正您在输出中看到的将%S展开为“OURCE”的行为。

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

字符串
请参见此处的“编写宏”一节http://rpm.org/user_doc/macros.html

sg2wtvxw

sg2wtvxw3#

还有另一种方法可以绕过这种RPM行为。您可以使用'%T'日期格式而不是'%H%M%S',如下所示:

stamp=$(date +'%Y%m%d%T')

字符串

相关问题