![-F— 从以下位置读取 %files 列表](https://linux22.com/image/716923/-F%E2%80%94%20%E4%BB%8E%E4%BB%A5%E4%B8%8B%E4%BD%8D%E7%BD%AE%E8%AF%BB%E5%8F%96%20%25files%20%E5%88%97%E8%A1%A8.png)
我正在编写一个创建多个包的 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")}