RPM:在 %pre scriptlet 中加载 bash 脚本

RPM: loading bash script in %pre scriptlet

我已将一些常用的实用程序脚本放入 common.sh,我想在 %pre 期间在我的 RPM 规范文件中使用它们。 common.sh 位于 RPM 包的根目录。

我原本打算做的只是简单地调用 source common.sh 之类的东西,但是如何在 %pre 期间从 RPM 访问 common.sh

我使用 RPM macros 解决了这个问题,方法如下:

在执行 rpmbuild 之前,我已将 common.spec 放入 SPECS 文件夹。

common.spec

%define mymacro() (echo -n "My arg is %1 " ; sleep %1 ; echo done.)

我已经添加 %include SPECS/common.spec 作为我的实际规范文件的第一行。

用法示例

%pre
%mymacro 5

My arg is 5 done.

多行宏

imo 在语法上非常脆弱,但您可以使用 \ 将换行符放入您的宏中。这将告诉 RPM 构建器它应该继续解析宏。以前面的宏为例:

%define mymacro() (echo -n "My arg is %1 " ; \
sleep %1 ; \
echo done.)

这样代码仍然会被解析回一行,因此第一行和第二行的 ;