Re: Bilddatei als Ressource im Script ablegen

David Haller <[email protected]> Wed, 29 Sep 2010 20:10:07 +0200
Newsgroups gmane.linux.suse.programming
Message-ID <[email protected]>
Hallo,

Am Mit, 29 Sep 2010, Thomas Moritz schrieb:
>Am Sonntag, 26. September 2010 18:10:37 schrieb David Haller:
>ich habe jetzt einen Schnellschuss zusammengeklappert.
>Ich lege das PNG also in eine Variable und wegen der 
>Uebersichtlichkeit benutze ich eine Function :-)
>Kannst ja mal ueber grobe Schnitzer meckern... 

Nix grobes.

>Die Abfrage, ob es bereits ein Bild mit Rahmen zu dem normalen JPG 
>gibt, muss ich noch an den Anfang legen.
>
>#!/bin/sh

Muß das /bin/sh, also portabel sein, oder darf's auch bash sein?
(wobei zsh und ksh müßten das, was ich vorschlage, ebenfalls
verarbeiten können.

>#set -xv
>trap "rm -f /dev/shm/thm____.____.png" SIGINT
                                        ^^^ das SIG-Präfix ist nicht
                                        portabel

Besser mit mktemp die Temporärdatei erzeugen:

RFILE=$(mktemp /dev/shm/thmXXXXXX.png)
trap "rm -f $RFILE" HUP INT TERM EXIT

Und beides evtl. innerhalb der Funktion.

>cd "$PWD"

Wozu das?

>machwas(){
>#Das PNG nach /dev/shm schreiben und erst dann an composite uebergeben
>#spart pro Durchlauf uudecode

>RFILE="/dev/shm/thm____.____.png"

Das entfällt dann.

>echo "$RAHMEN" | uudecode -o - > "$RFILE"

Da hättest du nachgucken sollen, was die Option '-o' macht ;)

echo "$RAHMEN" | uudecode -o "$RFILE"

>find -type f -name '*.[jJ][pP][gG]' | while read -r FILE; do

find -type f -iname '*.jpg' | while read -r FILE; do

>  #Files mit Rahmen __R.JPG nicht nochmal bearbeiten
>  if ! test `echo "$FILE" | grep "__R.JPG"`; then

Useless use of echo. Den Exitcode bekommst du auch direkt von grep.
Und das grep sollte man "verankern": grep '__R.JPG$'.

    if ! echo "$FILE" | grep -q "__R.JPG$"; then

Aber sinnvoller ist glaub eh:

    case $FILE in
        *__R.JPG) continue;;
    esac

ODER

    if test "$FILE" = "${FILE%%__R.JPG}"; then

>    echo "Bearbeite $FILE"
>    #Filenamen in Grossbuchstaben aendern
>    UPPERFILE=`echo "$FILE" | tr '[[:lower:]]' '[[:upper:]]'`

    UPPERFILE="$(echo "$FILE" | tr '[[:lower:]]' '[[:upper:]]')"

>    if ! test -e "$UPPERFILE"; then
>      mv "$FILE" "$UPPERFILE"
>    fi

Was ist, wenn $UPPERFILE existiert?

>    NEWFILE=`basename "$UPPERFILE" .JPG`"__R.JPG"

    NEWFILE="${UPPERFILE/%%.JPG}__R.JPG"

>    if test -e "$NEWFILE"; then
>      echo ">>> $NEWFILE existiert, es wird kein Rahmen hinzugefuegt"
>    else
>      composite "$RFILE" "$UPPERFILE" "$NEWFILE"
>    fi
>  fi
>done

># temporaeres PNG loeschen
>rm -f "$RFILE"

Gleich mit von 'trap' erledigen lassen ;)

>}
>
>RAHMEN="begin-base64 644 rahmen_mori.png.uu
>iVBORw0KGgoAAAANSUhEUgAAB4AAAAQ4CAYAAADo08FDAAAAAXNSR0IArs4c
>...
>===="
>
>machwas
>exit 0
>
>MfG Th. Moritz

Schaut aber schon gut aus ;)

-dnh

-- 
Wurst: an der Verwesung verhinderte Leichenteile ermordeter Tiere,
teilweise in deren eigene Kotkanäle gefülllt.
     -- Konni Scheller in <1fs4qd1.tndes08fuvb2N%[email protected]>