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 在这种情况下没有退出。
问题
- 如何从我的宏中中断
%pre
的执行?
- 是否可以 return 来自宏的值并在
%pre
期间将它们存储在变量中?
停止在 ()
中包装宏主体。
这是在第一种情况下生成子 shell 并阻止函数被看到,在第二种情况下阻止 exit
退出 %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: 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 在这种情况下没有退出。
问题
- 如何从我的宏中中断
%pre
的执行? - 是否可以 return 来自宏的值并在
%pre
期间将它们存储在变量中?
停止在 ()
中包装宏主体。
这是在第一种情况下生成子 shell 并阻止函数被看到,在第二种情况下阻止 exit
退出 %pre
scriptlet 本身。