工作中关于rpm的一个简单但头疼的问题:
公司有个需要自动化更新rpm包的需求,rpm包名是:tingyun-agent-php-1.0.5-1.x86_64,本来是一个很简单的东西,一行代码就可以实现:
for a in `rpm-aq|grep tingyun`;do rpm -e $a;done
但是结果是:
[[email protected] scripts]# for a in`rpm -aq|grep tingyun`;do rpm -e $a;done
error: packagetingyun-agent-php-1.0.5-1.x86_64 is not installed
报了个错误,说没有安装此包,但是很明显,查询这个包是存在的:
[[email protected] scripts]# rpm-aq|grep tingyun
tingyun-agent-php-1.0.5-1.x86_64
手动执行可以卸载没有问题:
[[email protected] scripts]# rpm -etingyun-agent-php-1.0.5-1.x86_64
[[email protected] scripts]#
但是这个需要用脚本实现,于是我写在了脚本里,用-x来查看步骤:
[[email protected] scripts]# sh -xtest.sh
++ rpm -aq
++ grep tingyun
+ for a in ‘`rpm -aq|greptingyun`‘
+ rpm -e‘tingyun-agent-php-1.0.5-1.x86_64‘
error:package tingyun-agent-php-1.0.5-1.x86_64 is not installed
然后我把倒数第二行的结果拿出来单独执行,是可以执行成功的:
[[email protected] scripts]# rpm -e‘tingyun-agent-php-1.0.5-1.x86_64‘
[[email protected] scripts]#
于是我换一种方法:
[[email protected] scripts]# rpm-aq|grep tingyun|xargs rpm -e
error: packagetingyun-agent-php-1.0.5-1.x86_64 is not installed
结果还是一样,多么奇葩的问题,我在其他的虚拟机上用这种方法都正常,但是这台虚拟机却碰到这种头疼的问题,怀疑可能和系统有关,百度和google上都找不到答案。纠结了一整天,没办法只好向老男孩老师请教,老师给出我一个方法如下,
for a in `rpm -aq tingyun-agent-php`;do rpm -e $a;done
直接用rpm –aq rpm包名,不用grep, 完美解决问题。
非常感谢老男孩老师,解决了我一大头疼的问题。不得不说,姜还是老的辣