gpt4 book ai didi

shell - 从 RPM 规范文件中提取 shell 脚本以进行静态分析

转载 作者:行者123 更新时间:2023-12-01 05:05:02 30 4
gpt4 key购买 nike

我要跑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),以便我可以使用流工具( grepawksed 等)?

我有大量我不想修改的规范文件。例如检查安全相关项目的脚本等,而无需解析规范文件。搜索 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com