( hrgy84 | 2014. 12. 22., h – 09:07 )

Anelkul, hogy megprobalnam megerteni, mit csinal a kod (kora hajnal van meg, ez ilyenkor nem megy):


anyupdate=0

for u in $(porg -a | grep "$PACKNAME"); do
  name="$(echo $u | sed 's/-[0-9].*//')"
  ver=$(echo $u | sed "s/$name\-//")
  new_ver="$(cat $VERSION | grep "$name" | sed "s/\.tar\.gz//;s/\.tar\.bz2//;s/\.src//;s/\.tar\.xz//")"

  if [ "$name-$ver" != "$new_ver" ]; then
    echo -e "$name-$ver $g -->$def $r $new_ver$def"
    anyupdate=$((anyupdate + 1))
  fi
done

if [ "${anyupdate}" -eq 0 ]; then
  echo -e "$r Nincs frissítés.$def $g:)$def"
else
  echo -e "$r $anyupdate db csomag frissíthető"
fi

Btw, az echo-knal en angol kiirast alkalmaznek, es megismerkednek a gettext nevu parancs hasznalataval. Bovebben lsd: https://github.com/meonkeys/bash-i18n-example

Ami a progress baros kerdest illeti, azt a) elfelejtenem b) megbaratkoznek a gondolattal, hogy "dialog" alapon irom ki. Rendes progress bart csinalni nativ bash-bol nem annyira trivialis, mivel a nyelv maga egy stateless cucc, az egyes programok nem tudjak rendesen a kozponti kornyezetben tarolni az allapotukat ket meghivas kozott.

Amit helyette ajanlok: felejtsd el a progress bart, ird ki csak a szazalekot paddingolva, es akkor azt 3 backspace jellel vissza tudod torolni.

Demonstracio:


#!/bin/bash

echo -ne "Progress:   0%"
for i in $(seq 1 100); do
  sleep 1
  echo -ne "\b\b\b\b$(printf "%3d%%" ${i})"
done
echo

Egyvalamire figyelj nagyon: a folyamatjelzo lefutasa utan mindenkepp kell egy ures echo, hogy visszaalljon a rendes kiirasi ciklus. Ha fuggvenyeket irsz a dologra, mindenkeppen kell egy "progressbreak" fuggveny is, hogy a hibajelzeseket ki tudd szepen irni.
--
Ki oda vágyik, hol száll a galamb, elszalasztja a kincset itt alant:


()=() 
('Y') Blog | @hron84
C . C Üzemeltető macik
()_()