首页 > 解决方案 > 将命令输出值定义为 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 文件中的变量吗?

标签: syntaxrpmspecifications

解决方案


代码是正确的。但您似乎认为这是在安装软件包时解释的。这是一个错误的假设。

在构建rpm 包时会评估所有宏。

即,您的代码的语义是:当从 spec/src.rpm 构建 rpm 包的机器具有 Realtek 以太网时,就会把这个要求放在那里。

如果你想做:“如果用户机器有 Realtek 网卡,那么需要额外的包”——这不能使用 rpm 功能来完成。您必须使用一些配置管理。例如,Ansible。


推荐阅读