[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: scriptable way to list packages that are not installed



On Sun, 14 Jan 2018, Vasyl Vavrychuk wrote:

Hi, John,

On Sun, Jan 14, 2018 at 8:48 AM, john doe <johndoe65534@mail.com> wrote:
On 1/14/2018 7:28 AM, john doe wrote:

$ dpkg-query -W -f='${db:Status-Abbrev}${binary:Package}\n' awk git gawk
cmake 2>&1 | awk '!/^ii/ || !/^un/{print $6}'
git
gawk
cmake

I also tried to parse stderr, but then I realized that relying on the output

  dpkg-query: no packages found matching

is not correct since it might be localized and is not suitable for scripting.

You could just discard the stderr, and take the complement of the hits
from dpkg-query, relative to the supplied arguments:

show-installed () {
    dpkg-query -W -f='${db:Status-Abbrev}${binary:Package}\n' "$@" |
    awk '/^ii/ {print $2}'
}

show-absent () {
    universe=("$@")
    diff <( IFS=$'\n' ; sort <<<"${universe[*]}" ) \
	<( show-installed "${universe[@]}" 2>/dev/null ) |
    sed -n 's/^< //p'
}

$ dpkg-query -l not-a-real-package exim4 mksh xorg bash xterm chromium
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                   Version          Architecture     Description
+++-======================-================-================-=================================================
ii  bash                   4.4-5            amd64            GNU Bourne Again SHell
un  exim4                  <none>           <none>           (no description available)
ii  mksh                   54-2+b4          amd64            MirBSD Korn Shell
ii  xorg                   1:7.7+19         amd64            X.Org X Window System
ii  xterm                  327-2            amd64            X terminal emulator
dpkg-query: no packages found matching not-a-real-package
dpkg-query: no packages found matching chromium

$ show-installed !*
show-installed not-a-real-package exim4 mksh xorg bash xterm chromium
dpkg-query: no packages found matching not-a-real-package
dpkg-query: no packages found matching chromium
bash
mksh
xorg
xterm

$ show-absent !*
show-absent not-a-real-package exim4 mksh xorg bash xterm chromium
chromium
exim4
not-a-real-package

(It is above my pay grade to tell whether "sort" needs its flags
tweaked to sort identically to dpkg on arbitary package names.)


Reply to: