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

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: