dpkg-deb shell script
Attached is a little shell script i wrote that does most of what the
real dpkg-deb does.
Glenn
#!/bin/sh
# Shell commands used, ar, tar, zcat, head, tail, cut, nl, sed
#
# TODO
# -I unsupported
# clean it up
# BUGS
# -f option displays an extra space at the start
packageName=$2
arg3=$3
arFile=
list_contents() {
ar -p $packageName data.tar.gz|zcat|tar -t -v
}
extract_control() {
extractPath=$arg3
if [ $extractPath = "" ]
then
extractPath="DEBIAN"
fi
if ! [ -e $extractPath ]
then
mkdir $extractPath
fi
ar -p $packageName control.tar.gz|zcat|tar -x -C $extractPath
}
display_field() {
field=$arg3
if [ $field = ]
then
ar -p $packageName control.tar.gz|zcat|tar -x -O ./control
exit
else
ar -p $packageName control.tar.gz|zcat|tar -x -O ./control|grep $field - |cut -d ':' -f 2 -
lastLineNo=`ar -p $packageName control.tar.gz|zcat|tar -x -O ./control|nl - |tail -n 1 -|cut -f 1 -`
fieldStartNo=`ar -p $packageName control.tar.gz|zcat|tar -x -O ./control|nl - | sed -n '/'$field':/,/: /'p -|head -n 1|cut -f 1 -`
fieldEndNo=`ar -p $packageName control.tar.gz|zcat|tar -x -O ./control|nl - |sed -n '/'$field':/,/: /p' -|tail -n 1|cut -f 1 -`
let "tailNum = lastLineNo - fieldStartNo"
let "headNum = fieldEndNo - fieldStartNo - 1"
ar -p $packageName control.tar.gz|zcat|tar -x -O ./control|tail -n $tailNum - |head -n $headNum
exit
fi
}
display_info() {
echo "display info"
}
extract_data() {
extractPath=$arg3
if [ $extractPath = "" ]
then
echo "no directory specified"
exit 1
fi
if ! [ -e $extractPath ]
then
mkdir $extractPath
fi
ar -p $packageName data.tar.gz|zcat|tar -x -C $extractPath
}
verbose_extract_data() {
extractPath=$arg3
if [ $extractPath = "" ]
then
echo "no directory specified"
exit 1
fi
if ! [ -e $extractPath ]
then
mkdir $extractPath
fi
ar -p $packageName data.tar.gz|zcat|tar -x -v -C $extractPath
}
usage() {
echo "dpkg-deb -[ecfxX] packagename"
exit 1
}
# Main functionality starts here
if [ $# = 0 ]
then
usage
fi
case $1 in
-c) list_contents ;;
-e) extract_control ;;
-f) display_field ;;
-I) display_info ;;
-x) extract_data ;;
-X) verbose_extract_data ;;
*) usage ;;
esac
Reply to: