![RPM 中的常用子例程](https://linux22.com/image/41532/RPM%20%E4%B8%AD%E7%9A%84%E5%B8%B8%E7%94%A8%E5%AD%90%E4%BE%8B%E7%A8%8B.png)
我有一些常用代码想要在%预和%邮政我的部分转速规格文件。当我将子程序放入%预部分,我需要将相同的子例程添加到%邮政RPM 部分。两次维护同一个子程序很糟糕。这是一个例子:
转速规格文件%预和%邮政部分:
%pre
log_file=/var/log/myrpminstall.log
#-------------------------------------
# Send text log_file
#-------------------------------------
log_it() {
log_msg=$1
echo -e $log_msg >> $log_file
}
log_it "pre section log information"
%post
log_it "Post section log informations"
目前,当%邮政的部分转速在安装过程中执行,我收到一条错误消息:
/var/tmp/rpm-tmp.36557: line 5: log_it: command not found
那么,有没有办法制作一个像这样的子程序日志的所有部分(全局功能)均可访问转速??目前,我必须将日志函数在%邮政如果我想在那里使用它。
答案1
这不起作用的原因是因为每个 scriptlet(%post
、%pre
等)都是作为独立脚本编写的,并传递给 bash/sh 执行。因此,执行它的 shell 不知道另一个 scriptlet 中定义的任何函数。
我建议使用 RPM 宏来实现此目的。您可以将它们放入~/.rpmmacros
或/etc/rpm/macros
。像这样的东西:
%define log \
log_it() { \
log_msg=$1 \
echo -e $log_msg >> $log_file \
}
%pre
%log
log_it test
%post
%log
log_it test
看http://rpm5.org/docs/rpm-guide.pdf欲了解更多信息,甚至/usr/lib/rpm/macros
。