-F— 从以下位置读取 %files 列表

-F— 从以下位置读取 %files 列表

我正在编写一个创建多个包的 spec 文件。我可以使用 for 循环遍历具有不同名称的 %files 指令吗,如下所示:

for name in {package1, package2, package3} ; do
  %files -n $name
  %attr(644, root, root) /etc/systemd/system/$name.service
done

答案1

由于帖子长度受限,长话短说:不行。

Spec 文件不是任何形式的脚本语言。

答案2

Spec 文件不是脚本语言,您仍然可以使用自己的脚本文件来创建文件列表并将列表提供给 spec 文件。来自文档“%files 列表的指令“:

-F<文件>— 从以下位置读取 %files 列表<文件>

-F选项用于指示 RPM 读取%文件列表中的命名文件。例如 %文件列出 spec 文件中,使用命名的文件-F选项应该每行包含一个文件名,并且还应包括本节中命名的任何指令。

%files latex -f tetex-latex-skel

这里,文件 tetex-latex-skel 中的文件名将被打包。

答案3

%{expand:%(/bin/bash -c "for name in package1 package2 package3; do
cat <<EOF
%files -n \$name
%attr(644, root, root) /etc/systemd/system/\$name.service
EOF
done")}

相关内容