While we're talking about making package handling easier for
newbies, I'd like to present two simple shell scripts that I
wrote quite some time ago.  Yeah, I know I could send-pr this,
but I'm not sure if they're really worth it (if someone thinks
they are, then I'll send-pr them).

The first one is "pkg_ls" and it simply lists packages that
are installed.  If no arguments are given, it lists all of
them, otherwise the arguments are (abbreviated) package names
to list.  For example, "pkg_ls lynx" will list your installed
lynx package, without you having to know which version it is.
You can do this with pkg_info | grep, but remember we're
talking about making things easier for newbies.  ;-)

The second script is called "pkg_rm"; it can be used to delete
packages like pkg_delete, but you can use arguments in the same
way as for pkg_ls above (i.e. "pkg_rm lynx").  Think of it like
pkg_info | grep | pkg_delete.

It might more sense to implement these features in pkg_info and
pkg_delete, resprectively, but I don't have the time to do that
(and these scripts work fine, so I have no incentive to bother
with the C sources of pkg_{info,delete}).

------------------ begin file pkg_ls ------------------
#!/bin/sh -

PL_EXITCODE=0

Usage()
{
        echo ""
        echo "Usage:  `basename $0` [<pkgname ...>]" >&2
        echo "Where <pkgname> is one or more package names which may" >&2
        echo "be abbreviated." >&2
        echo ""
        exit 1
}

if OPTS=`getopt 'h?' "$@"`; then
        :
else
        Usage
fi

set -- $OPTS
while :; do
        case "$1" in
                --)     shift; break;;
                -*)     Usage;;
                *)      break;;
        esac
        shift
done

if [ $# -lt 1 ]; then
        set -- .
fi

while [ $# -gt 0 ]; do
        PKGS=`pkg_info -aI 2>/dev/null | grep "^$1"`
        if [ -z "$PKGS" ]; then
                echo "*** No package matching \"$1\" found!" >&2
                echo ""
                PL_EXITCODE=1
        else
                echo "$PKGS" >&2
        fi
        shift
done

exit $PL_EXITCODE
------------------ end file pkg_ls ------------------

------------------ begin file pkg_rm ------------------
#!/bin/sh -

PR_FLAGS=""
PR_EXITCODE=0

Usage()
{
        echo ""
        echo "Usage:  `basename $0` [-fln] <pkgname ...>" >&2
        echo "Where <pkgname> is one or more package names which may" >&2
        echo "be abbreviated, as long as they're unique.  If multiple" >&2
        echo "packages match, they are listed (but none is removed)." >&2
        echo "   -f   Force removal, ignoring dependencies." >&2
        echo "   -l   Only list packages (do not remove)." >&2
        echo "   -n   Print what would be done (do not remove)." >&2
        echo ""
        exit 1
}

if OPTS=`getopt 'lnfh?' "$@"`; then
        :
else
        Usage
fi

set -- $OPTS
while :; do
        case "$1" in
                -f)     PR_FLAGS="-f";;
                -n)     PR_NOTREALLY=1;;
                -l)     PR_LIST=1;;
                --)     shift; break;;
                -*)     Usage;;
                *)      break;;
        esac
        shift
done

if [ $# -lt 1 ]; then
        Usage
fi

while [ $# -gt 0 ]; do
        PKGS=`pkg_info -aI 2>/dev/null | grep "^$1"`
        if [ -z "$PKGS" ]; then
                echo "*** No package matching \"$1\" found!" >&2
                echo ""
                PR_EXITCODE=1
        elif [ `echo "$PKGS" | wc -l` -eq 1 ]; then
                PKG=`echo "$PKGS" | cut -f1 -d" "`
                if [ "$PR_LIST" = 1 ]; then
                        echo "$PKGS"
                elif [ "$PR_NOTREALLY" = 1 ]; then
                        echo pkg_delete $PR_FLAGS $PKG
                else
                        echo "Removing $PKGS ..."
                        pkg_delete $PR_FLAGS $PKG
                fi
        else
                echo "*** Multiple packages match \"$1\":" >&2
                echo "$PKGS" >&2
                echo ""
                PR_EXITCODE=1
        fi
        shift
done

exit $PR_EXITCODE
------------------ end file pkg_rm ------------------

Regards
   Oliver

-- 
Oliver Fromme, Leibnizstr. 18/61, 38678 Clausthal, Germany
(Info: finger userinfo:[EMAIL PROTECTED])

"In jedem St�ck Kohle wartet ein Diamant auf seine Geburt"
                                         (Terry Pratchett)


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to