Jac*_*Leo 5 linux redhat centos yum rpm
从本地文件目录安装 rpm 包时,它第一次运行良好
sudo yum install packages/* -y --disablerepo=*
Run Code Online (Sandbox Code Playgroud)
当作为自动化脚本的一部分第二次运行相同的事情时,它会引发错误(退出代码 1)
packages/package.rpm: does not update installed package.
Error: Nothing to do
Run Code Online (Sandbox Code Playgroud)
我可以运行 yum update(退出代码 0)
sudo yum update packages/* -y --disablerepo=*
...
No packages marked for update
Run Code Online (Sandbox Code Playgroud)
这样做的问题是更新将跳过未安装的软件包。
如果这里有任何真正的问题,我不想忽略退出代码,只想做install-or-update
. 有没有rpm -i
等价物可以实现这一目标?请注意,这是在一组 rpm 软件包上完成的,这些软件包在任何时候都可能包含其他软件包。
我想一种选择是在 shell 脚本中迭代它们并检查它们是否已安装,但是再次依赖解析可能会变得相当痛苦,听起来确实像重新发明一辆自行车。
更新:
rpm --install
将根据失败包的数量抛出退出代码。
https://www.redhat.com/archives/rpm-list/2005-July/msg00071.html
rpm --freshen
将忽略以前未安装的任何 rpm,而根本不提供任何输出。
在我的系统(centos6、centos7)上,即使出现“Error: Nothing to do”消息,“yum localinstall”也会返回代码 0,而“yum install”则返回 1。
sudo yum localinstall packages/* -y --disablerepo=*
Run Code Online (Sandbox Code Playgroud)
无论如何,您也可以检查消息结果,将其视为自动化脚本中的“正常错误”,例如使用 bash:
sudo yum install packages/* -y --disablerepo=* 2>&1 | tee /tmp/yum.output
grep -q "Error: Nothing to do" /tmp/yum.output
if [ $? -eq 0 ]; then
... code for no error
else
... code for error
fi
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5801 次 |
最近记录: |