On Fri, 27 Sep 2013, Cristian Ionescu-Idbohrn wrote:
> On Fri, 27 Sep 2013, Ian Campbell wrote:
> >
> > This all seems like a lot of fuss to go through simply to allow this
> > stuff to run on a completely ancient (2.5 or earlier kernel).
> >
> > But if you must why not just use linux-version from the
> > linux-base-package?
> > $ linux-version --help
> > Usage: /usr/bin/linux-version compare VERSION1 OP VERSION2
> > /usr/bin/linux-version sort [--reverse] [VERSION1 VERSION2
> > ...]
> > /usr/bin/linux-version list [--paths]
> >
> > The version arguments should be kernel version strings as shown by
> > 'uname -r' and used in filenames.
> >
> > The valid comparison operators are: lt le eq ge gt
>
> Yes. That would be simplier, but it will create a dependency to
> package linux-base (Priority: optional).
This (more fuss ;) is a simplier and more robust example of kernel version
comparison function:
#!/bin/sh
set -eu
#set -x
cmp_1_le_2() {
[ $# -eq 2 ] || {
echo "cmp_1_le_2: wrong number of arguments" >&2
exit 1
}
local IFS=.- _1 _2
_1=$1
_2=$2
set -- $_1
[ $# -ge 2 ] || {
echo "cmp_1_le_2: bad 1:st version number '$_1'" >&2
exit 1
}
local v1
v1=$(($(($1 << 8)) + $2))
set -- $_2
[ $# -ge 2 ] || {
echo "cmp_1_le_2: bad 2:nd version number '$_2'" >&2
exit 1
}
local v2
v2=$(($(($1 << 8)) + $2))
[ $v1 -le $v2 ]
}
if cmp_1_le_2 $1 $2; then
echo "$1 <= $2"
else
echo "$1 > $2"
fi
Cheers,
--
Cristian
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]