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

Re: scriptable way to list packages that are not installed



On Tue, 16 Jan 2018, davidson wrote:

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

Er, the history expansions entered at the two prompts below don't work
as shown, with the command line at the prompt immediately above.

If you must know, (and you don't, but I'll tell you anyway!) in
actuality I used a one-word alias defined as "dpkg-query -l", which
prevented the "-l" flag from getting included in the "!*" expansions.

Is there a natural law or something, that every email message sent
must contain at least one distracting error that is totally beside the
point?

Anyways, over and out.

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: