RPM:从包含的 RPM 宏返回值

RPM: returning values from included RPM macro

这是 的后续问题。

我正在尝试将一些实用函数定义为宏,这样以后我也可以在构建其他 RPM 包时 %include 它们。假设我想要一个函数 testfunc() ,我想用它来检查目标系统上是否存在某些东西。如果条件未满足,我想中断我的 RPM %pre scriptlet 的执行。

我尝试过的事情:

在宏中定义一个bash函数

common.spec

%define importfunction() (testfunc() { echo "Cancelling installation!" ; exit 1 ; })

package.spec

%include SPECS/common.spec

...

%pre
%importfunction

testfunc

RPM 安装输出

testfunc: command not found

直接退出宏

common.spec

%define testfunc() (echo "Cancelling installation!" ; exit 1)

package.spec

%include SPECS/common.spec

...

%pre
%testfunc

echo "Installation still running :("

RPM 安装输出

Cancelling installation!

Installation still running :(

问题是 %pre scriptlet 在这种情况下没有退出。

问题

停止在 () 中包装宏主体。

这是在第一种情况下生成子 shell 并阻止函数被看到,在第二种情况下阻止 exit 退出 %pre scriptlet 本身。