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.)
这样代码仍然会被解析回一行,因此第一行和第二行的 ;
。
我已将一些常用的实用程序脚本放入 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.)
这样代码仍然会被解析回一行,因此第一行和第二行的 ;
。