diff options
-rwxr-xr-x | pkg_is_installed | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/pkg_is_installed b/pkg_is_installed new file mode 100755 index 0000000..ecc8c5e --- /dev/null +++ b/pkg_is_installed @@ -0,0 +1,45 @@ +#!/bin/sh + +die() { + if [ "$*" ]; then + echo "$*" 1>&2 + fi + exit 2 +} + +TARGET=$1 +case "$TARGET" in + -*|'') cat <<EOF +Usage: $0 <pkgname> + +Checks the Slackware package database in /var/log/packages and returns +true (0) if <pkgname> is installed, false (1) otherwise. + +If there's an error, the return status will be 2, which is still false, +but the caller can check for this by examining the \$? variable. + +If standard output is a terminal, the full installed package +name (package-version-arch-build_tag) will be printed to stdout, +or "no package" if no such package is installed. + +Like Slackware's installpkg, $0 respects the environment +variable ROOT, to operate on a mounted partition other than /. +EOF + ;; +esac + +if [ "$2" != "" ]; then + die "Usage: $0 <pkgname|--help>" +fi + +cd $ROOT/var/log/packages || die "Are you sure this is Slackware?" +for i in ${TARGET}-*; do + j=$(echo $i | rev | cut -d- -f4- | rev) + if [ "$TARGET" = "$j" ]; then + [ -t 1 ] && echo $i + exit 0 + fi +done + +[ -t 1 ] && echo "no package '$TARGET' installed" +exit 1 |