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

RPM:正在%pre-scriptlet中加载bash脚本,bash,rpm,rpm-spec,Bash,Rpm,Rpm Spec,我在common.sh中放入了一些常用的实用程序脚本,我想在%pre期间在我的RPM规范文件中使用这些脚本common.sh位于RPM包的根目录中 我计划做的是简单地调用类似于source common.sh,但是在%pre期间如何从RPM访问common.sh?我能够使用以下方法解决此问题: 在执行rpmbuild之前,我已将common.spec放入SPECS文件夹 通用规范 %define mymacro()(echo-n“我的参数是%1”;睡眠%1;echo已完成。) 我已经添加了%i

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


我计划做的是简单地调用类似于
source common.sh
,但是在
%pre
期间如何从RPM访问
common.sh

我能够使用以下方法解决此问题:

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

通用规范

%define mymacro()(echo-n“我的参数是%1”;睡眠%1;echo已完成。)
我已经添加了
%include SPECS/common.spec
作为实际spec文件的第一行

用法示例

%pre
%mymacro 5
我的arg完成了5

多行宏

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

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

这样代码仍将被解析回一行,因此
在第一行和第二行。

如果
common.sh
在rpm内部,我不相信您可以(至少不可靠)。您最好在生成时将
common.sh
作为rpm宏,以便在
%pre
使用时使用。@EtanReisner您知道关于rpm宏的好资源吗?稍旧一些,但仍然非常准确/有用:@EtanReisner谢谢!跟进问题: