linux – yum安装本地rpm trows错误,如果是最新的

从本地文件目录安装rpm软件包时,它第一次运行正常
sudo yum install packages/* -y --disablerepo=*

当第二次作为自动脚本的一部分运行相同的东西时,它会抛出一个错误(退出代码1)

packages/package.rpm: does not update installed package.
Error: Nothing to do

我可以运行更新(退出代码0)

sudo yum update packages/* -y --disablerepo=*
...
No packages marked for update

这个问题是更新将跳过未安装的软件包.

如果这里有任何实际问题,我不想忽略退出代码,只想进行安装或更新.是否有rpm -i等效物可以实现这一目标?请注意,这是在一组rpm包上完成的,这些包可能包含其他包.

我想一个选择是在shell脚本中迭代它们并检查它们是否已安装,但是再次依赖性解析可能会变得相当痛苦并且听起来像是重新发明了一辆自行车.

更新:
rpm –install将根据失败的软件包数量退出退出代码.
https://www.redhat.com/archives/rpm-list/2005-July/msg00071.html

rpm –freshen将忽略之前未安装的任何rpms,而根本不提供任何输出.

解决方法

在我的系统上(centos6,centos7)“yum localinstall”将返回代码0,即使“错误:无事可做”消息,而“yum install”返回1.
sudo yum localinstall packages/* -y --disablerepo=*

无论如何,您还可以检查消息结果,将其视为自动化脚本中的“正常错误”,例如使用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

相关文章

文件查找(find) 1 find 简单的说,就是实时查找指定的内容或条件。特点:最新、最快、最准确。 用法:...
非交互式添加分区 方法一 添加/deb/sdb 下的分区,其实位置为1到1000M,第二个分区位置为1001至3000M,...
编译安装httpd 1 去官网下载源码包 为避免非法软件,一定要去官网下载http://www.apache.org httpd-2.4...
gdisk用法 gdisk - InteractiveGUIDpartitiontable (GPT) manipulator GPTfdisk (akagdisk) isatext-mo...
1 一定用快捷键 这里简单的说下几个常用的快捷按键。 1.1 移动光标快捷键 Crtl + a 光标回到命令行...
bash shell中测试命令 test命令提供了if-than语句中测试不同条件的途径。如果test命令中列出的条件成立...