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

Re: bash script: stdin wieder ausgeben



Am Sonntag, 21. Oktober 2012, 14:44:22 schrieb David Haller:
> Hallo,
> 
> Am Sun, 21 Oct 2012, Dirk Abe schrieb:
> >ein Bash Script bekommt bei seinem Aufruf den Inhalt einer Mail
> >an Stdin übergeben und soll diesen am Ende auch wieder an Stdout
> >zurückgeben.
> >
> >Das Script:
> >
[...]
> >echo $1
> >cat $1
> 
> Du hast kein '$1'.
> 
> [..]

Das wußte ich nicht, das der stdin hier wie ein Zeiger funktioniert.


> >+ munpack
> >munpack: reading from standard input
> 
> Hier frisst dir 'munpack' schon das stdin weg.
> 
> Und auf 'stdin' kannst du nicht "zurückwandern" an den Anfang von
> stdin.
> 
> Am besten ist wohl die Datei in den Speicher, also in eine Variable zu
> lesen:
> 
> ====
> file=$(< /dev/stdin )
> echo "$file" | munpack
> echo "[stdin]" ## oder: echo $(readlink /dev/stdin)
> cat "$file"
> ====
> 
> Ansonsten solltest die Datei als Namen übergeben und "$1" verwenden:
> 
> ====
> # Anhänge speichern
> munpack "$1"   >> $DIR2/munpack.log
> 
> # Mail zurückgeben
> echo "$1"
> cat "$1"
> ====
> 
> (und das Script mit dem Dateinamen aufrufen, statt dei Datei per stdin
> reinzuschieben)
> 
> Wenn stdin immer eine Datei ist könnte man noch etwas tricksen und im
> script die Datei nochmal öffnen.
> 
> ====
> filename=$(readlink /dev/stdin)
> test -f "$filename" || { r=$?;
>      echo "FEHLER: stdin ist keine Datei!"; exit $r; }
> munpack "$filename"
> echo "filename"
> cat "$filename"
> ====
> 
> Besser aber ist wie gesagt, du übergibst einfach den Namen der Datei
> als Argument an das Script bzw. liest die Datei in eine Variable.
> 

Die Mail als Datei beim Aufruf zu übergeben geht leider nicht, das Script wird 
aus Mailfilter heraus aufgerufen und der übergibt den Mailinhalt auf stdin und
erwartet ihn auch wieder auf stdout zurück.
Die Variante mit der Variable:
> file=$(< /dev/stdin )
> echo "$file" | munpack

hat leider nicht geklappt. munpack kam damit nicht klar und fand angeblich 
keine Anhänge mehr..
Ich gehe nun den Weg über ein  tempfile, damit klappt es dann:


#!/bin/bash


# Verzeichnis f�r die aktuelle KW anlegen 
DIR=$(date +%Y_%U)
DIR2=/home/mailuser/anhang/iap
DIR3=$DIR2/$DIR
LOG=$DIR2/munpack.log

mkdir $DIR3 >> $LOG 2>&1
cd $DIR3
MAILF=$(< /dev/stdin)
TEMPF=$(tempfile)

if [ -w $TEMPF ]
        then
                echo "$MAILF" > $TEMPF
                cat $TEMPF | munpack >> $LOG 2>&1
                cat $TEMPF
                rm -f *.jpg >> $LOG 2>&1
                rm -f $TMEPF >>  $LOG 2>&1
                exit 0

        else exit 0
fi





> Achso, alles glaub bash-spezifisch.

merci für deine Hilfe. 
> 
> HTH,
> -dnh
> 
> > Heute wurde ausdrücklich gesagt, daß seine Haustür kein Schloß hat.
> > Hat er keine Wertsachen im Haus?                   -- Andrej Kluge
> 
> Ich sag nur: 4 Exfrauen.                                -- Eva Preuß
>                                  in de.rec.tv.serien über Gibbs/NCIS


Reply to: