这是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
期间将它们存储在变量中?答案 0 :(得分:2)
停止在()
。
这会产生一个子shell并阻止在第一种情况下看到该函数,并阻止exit
在第二种情况下退出%pre
scriptlet本身。