我想在嵌入在spec文件中的脚本上运行ShellCheck,该文件将在部署RPM的地方运行。我有.spec片段之类的,
%setup -q
cat > ./example.sh << EOF
#!/bin/sh
echo "example"
EOF
以及钩子,
%post
#!/bin/sh
echo "Hello"
有没有办法以编程方式提取这些shell片段来运行像ShellCheck这样的脚本分析工具?像是rpmbuild --save-temps
或者像这样的概念?或者每个脚本都需要被已知文本绑定,以便我可以使用流工具(grep
,awk
,sed
等)?
我有大量的spec文件,我不想修改。例如,检查安全相关项的脚本等,而无需解析spec文件。搜索bison + spec
给出了错误的概念,我认为你需要解析RPM宏和许多其他机制;或者语法比我想的简单?
答案 0 :(得分:1)
我最近也考虑过为我的一些RPM做这个。
您可以使用spec文件本身的python获取%prep
,&#39;%build&#39;,%install
等部分。
CentOS 5代码:
import rpm
ts = rpm.ts()
spec = ts.parseSpec("package.spec")
for section in ['build', 'clean', 'install', 'prep']:
try:
print '%s' % (getattr(s, section,)())
except:
pass
CentOS 6代码:
import rpm
spec = rpm.spec('package.spec')
for section in ['build', 'clean', 'install', 'prep']:
if hasattr(spec, section):
print '%s' % (getattr(spec, section),)
似乎没有办法(在CentOS 5或6中)获取前/后/等的内容。虽然通过python编写了scriptlet。
因此,您可能需要使用rpm -qp --scripts
将它们从构建的RPM中取出,然后将该输出拆分为临时文件并对其运行shellcheck。