( uzsolt | 2015. 12. 21., h – 16:18 )

A "don't repeat yourself" elv azért nem annyira lenne hülyeség. Nézd meg az mc, nano, make verzióit lekérdező egysorosakat: gyakorlatilag mindegyik ugyanaz, csak a curl-nek átadott cím más (talán lehetne egy változóban tárolni az értékét?), a sed feltételében szereplő regexp annyiban különbözik, hogy..., illetve a cserében mc-, nano, make- van. A többi karakter pedig tök ugyanaz. Ha lesz száz csomagod, akkor százszor fogod leírni ugyanazt?

Az "ahogy én csinálnám"-rész következik.

A függvény, ami lekérdi a legújabb verziót:


# $1 - csomag neve
get_latest_version() {
  source /usr/pkg/$1.conf
  SUFFIX=${SUFFIX-.tar.gz}
  curl -L -s ${PKG_DL_URL} | sed -rn "/href=\"${PKGNAME}/ s@.*a href=\"${PKGNAME}-[^\"]*${SUFFIX}).*@\1@p" | sort -V | tail -n 1
}

A konfigfájlok (részei):


# mc.conf
PKGNAME=mc
PKG_DL_URL=http://ftp.midnight-commander.org/
SUFFIX=.tar.gz

# nano.conf
PKGNAME=nano
PKG_DL_URL=http://ftp.gnu.org/gnu/nano/
# SUFFIX=.tar.gz # nem adjuk meg, jó az alapértelmezett

#make.conf
PKGNAME=make
PKG_DL_URL=http://ftp.gnu.org/gnu/make/
# itt már ide se írom a SUFFIX-ot

És ezután a get_latest_version mc kiírja legújabb mc-verziót, a get_latest_version nano a legújabb nano-verziót, stb. Felesleges fájlba írni (aminél aztán a régi bejegyzést törölni kell, stb.).