我要跑ShellCheck在将在部署 RPM 的地方运行的规范文件中嵌入的脚本上。我有 .spec 片段,例如,
%setup -q
cat > ./example.sh << EOF
#!/bin/sh
echo "example"
EOF
除了 Hook ,
%post
#!/bin/sh
echo "Hello"
有没有办法以编程方式提取这些 shell 片段来运行像 ShellCheck 这样的脚本分析工具?可能像
rpmbuild --save-temps
或者像这样的一些概念?还是每个脚本都需要被已知文本绑定(bind),以便我可以使用流工具( grep
、 awk
、 sed
等)?我有大量我不想修改的规范文件。例如检查安全相关项目的脚本等,而无需解析规范文件。搜索
bison + spec
给出了错误的概念,我认为您需要解析 RPM 宏和许多其他机器;或者语法比我想象的更简单?
最佳答案
我最近也一直在考虑为我的一些 RPM 执行此操作。
你可以得到%prep
, '%build', %install
,等等。来自规范文件本身的python部分。
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 中)获取 pre/post/etc 的内容。虽然通过 python 编写脚本。
因此,您可能需要使用
rpm -qp --scripts
将它们从内置 RPM 中移除。然后将该输出拆分为临时文件并对其运行 shellcheck。
关于shell - 从 RPM 规范文件中提取 shell 脚本以进行静态分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29756018/