shell-script - bináris csomagfüggőségei

Ha meg szeretnenk tudni a saját programunk függőségeit, és Debian alapú rendszerünk van, akkor segít ez a kis script.

[code]
#!/bin/sh
# Binaris fajl fuggosegeinek listazasa.

if [ $# -ne 1 ]; then
echo "Hasznalat: `basename $0` FAJL" >&2
exit 1
fi

if [ ! -f $1 ]; then
echo "$1: A fajl nem letezik." >&2
exit 1
fi

if [ -f debian ]; then
echo "Letre kell hoznom a 'debian' konyvtarat, de mar letezik egy ilyen" \
"nevu fajl." >&2
exit 1
fi

mkdir debian
touch debian/control

# Kerjuk le a fuggosegi listat es rendezzuk azt. Ha mar letezik a
# 'debian/control', akkor ertesitenunk kell a felhasznalot az esetleges
# hibairol.
dpkg-shlibdeps -O "$1" 2>&1 | \
grep -v "dpkg-shlibdeps: warning" | \
awk \
'{ \
gsub( /.*Depends=/, "", $0 ); \
gsub( /, /, "\n", $0 ); \
gsub( /\)/, " )", $0 ); \
print $0; \
}' | \
column -t

# Toroljuk a 'debian/control' ha az ures. (tehat csak a szkript hasznalta)
if [ ! -s debian/control ]; then
rm -f debian/control
fi

# Ha a 'debian' konyvtar ures, toroljuk azt is.
rmdir debian 2> /dev/null

exit 0
[/code]

Hozzászólások

Csak jelzem, hogy minden if .. fi szerkezetedben ugyanazt a meglehetősen kellemetlen hibát követed el: kiírsz egy hibaüzenetet, majd pedig paraméter nélküli exit-tel kilépsz. Ez pedig ekvivalens az "exit $?" formával, azaz az echo státuszkódját adod vissza, ami nagy eséllyel 0, azaz hibátlan. Tehát hibaüzenet után hibátlan státusszal fejezed be.

Miert failel, ha letezik debian konyvtar? Mivel dpkg-shlibs-et -O -val hivod, nem fog oda irni, ha meg van control, ami bezavarhat, feltehetoleg az direkt van ott.

A debian konyvtar torlese meg lehetne egy egyszeru rmdir debian 2>/dev/null || true. Ha nem ures, akkor rmdir failel, mi meg nagy ivben teszunk ra. Ha ures, akkor meg torli, es boldogok vagyunk.

Az rmdir jogos, ezt feleslegesen túlbonyolítottam, de az, hogy fail-el, ha létezik már debian könyvtár, az nem igaz. Amúgy meg azért kell ez a könyvtár, mert e nélkül (nállam) nem hajtódik végre a dpkg-shlibs:


dpkg-shlibdeps:  error:  cannot  read  debian/control:  No  such  file  or  directory

Olyan kapcsolót meg nem találtam, hogy mellőzze a control fájlt.
--
Azt akarom, hogy az emberek ne kényszerből tanuljanak, hanem azért, mert tudni akarnak.