8

When I run yum install <X> where <X> has already been installed, yum exits with a return status of 1 and prints "Error: Nothing to do".

Aside from checking for this string in the output (which seems like a very shaky thing to base my script on), is there some way I can test whether the package already exists? Clearly, yum knows whether or not it already exists, since it's throwing that error, but how can I access that knowledge?

To add to this, some of the packages are downloaded by way of URLs, not package names, so checking yum list installed doesn't work.

AmadeusDrZaius
  • 1,232
  • 1
  • 12
  • 19
  • 1
    `yum` knows by querying the rpm database. [for example](https://dpaste.de/Zbkk) – Bratchley Mar 25 '15 at 18:09
  • @Bratchley Is there a way to get that name from a package url? – AmadeusDrZaius Mar 25 '15 at 18:13
  • You should be able to give `rpm` a full URL to the RPM you're interested in. [Example](https://dpaste.de/9feN) which will give you the package name. One note would be that it uses `wget` internally but seems to silently suppress errors. – Bratchley Mar 25 '15 at 18:17
  • 1
    @taliezin that's roughly equivalent to `rpm -qa packageName` except it's printed in a way that makes it look like `yum` output. – Bratchley Mar 25 '15 at 18:18
  • @Bratchley, sorry i saw the link later, but I deleted it. – taliezin Mar 25 '15 at 18:25
  • Similar question is here: https://unix.stackexchange.com/questions/122681/how-can-i-tell-whether-a-package-is-installed-via-yum-in-a-bash-script – GreenRaccoon23 Aug 23 '19 at 14:37

2 Answers2

9

In your script use rpm -q packagename:

if  rpm -q  vim-enhanced
then
  echo "Already installed vim-enhanced"
else
  echo "Install vim-enhanced"
fi
JJoao
  • 11,887
  • 1
  • 22
  • 44
  • Thanks, this worked well. I had to manually fiddle with the package name for packages which were obtained through urls, but other than that, it went smoothly. – AmadeusDrZaius Mar 26 '15 at 00:38
  • 1
    I'm happy it worked. Sometimes package names can be tricky. I wish package names were slightly more normalized... – JJoao Mar 26 '15 at 06:32
6

You can try:

#yum list installed | grep tmux
tmux.x86_64                      1.9a-5.fc21        @updates                    

or:

#yum list installed tmux
Loaded plugins: langpacks
Installed Packages
tmux.x86_64                                                               1.9a-5.fc21                                                               @updates

Without grep you get some extra lines, but both outputs can be piped through some text editor according to your needs.

petry
  • 968
  • 1
  • 8
  • 14