syntax - 将命令输出值定义为 rpm SPEC 文件中的变量
问题描述
我正在尝试在 SPEC 文件中定义一个变量并将命令输出分配为该变量的值。
%define kernel %(sudo lspci|egrep -q 'Ethernet.*Realtek'|echo $?)
%if 0%{?kernel} < 1
Requires: kmod-r8168 >= 8.048.00-1.el7_7.elrepo
%endif
在这里,我定义了一个变量“内核”,并希望将命令的输出分配sudo lspci|egrep -q 'Ethernet.*Realtek'|echo $?
给该kernel
变量
上面的代码没有给出任何错误,但 if 条件逻辑不起作用。我们可以将命令输出分配给 SPEC 文件中的变量吗?
解决方案
代码是正确的。但您似乎认为这是在安装软件包时解释的。这是一个错误的假设。
在构建rpm 包时会评估所有宏。
即,您的代码的语义是:当从 spec/src.rpm 构建 rpm 包的机器具有 Realtek 以太网时,就会把这个要求放在那里。
如果你想做:“如果用户机器有 Realtek 网卡,那么需要额外的包”——这不能使用 rpm 功能来完成。您必须使用一些配置管理。例如,Ansible。