RPM:从包含的RPM宏返回值

时间:2015-07-10 12:47:42

标签: bash rpm rpm-spec

这是RPM: loading bash script in %pre scriptlet的后续问题。

我试图将一些实用程序函数定义为宏,所以稍后我也可以在构建其他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:找不到命令

直接退出

common.spec

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

package.spec

%include SPECS/common.spec

...

%pre
%testfunc

echo "Installation still running :("

RPM安装输出

  

取消安装!

     

安装仍在运行:(

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

问题

  • 如何从宏中断开%pre的执行?
  • 是否可以从宏中返回值并在%pre期间将它们存储在变量中?

1 个答案:

答案 0 :(得分:2)

停止在()

中包裹宏体

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