[Bash-Newbie] Variable aus stdin

MrToiz

Well-known member
ID: 72115
L
28 April 2006
766
91
Hallo zusammen!

Hatte bisher noch nicht viel mit Bash-Programmierung zu tun, weshalb ich bei folgendem Problem schon an meine Grenzen stoße:

Das Script sendit.sh aus dem sqwebmail-Paket des Courier-MTA nimmt Mails vom Web-Frontend entgegen und reicht diese an den MTA weiter. Ich möchte nun aus dem über die Standardeingabe kommenden Mail-Body den From: Header auslesen und die darin enthaltene Mail-Adresse als Parameter an sendmail weitergeben.

Im Original enthält sendit.sh nur die folgende Zeile:
Code:
exec /usr/sbin/sendmail -oi -t $DSN -f "$1"
Mittels folgendem Code habe ich es auch geschafft, schonmal die passende Zeile aus dem Header zu fischen:
Code:
read mailbody
grep From: < $mailbody > /home/mrtoiz/from.txt
Über cut -b 7- konnte ich daraus auch die E-Mail-Adresse extrahieren, aber ich habe es nicht geschafft, alles so in das Script zu packen, dass ich am Schluss die Adresse in einer Variable hab und an sendmail übergeben kann. Folgender Versuch hat nicht zum gewünschten Ergebnis geführt:
Code:
from=`grep From: < $mailbody | cut -b 7-`
Die Variable from war anschließend leer :(

Wie krieg ich es also hin, aus dem stdin eine Zeile rauszusuchen und einen bestimmten Teil davon in einer Variablen zu speichern?

Ich hoffe, man versteht mich :)

Liebe Grüße,
MrToiz
 
Ich hätte das auch mit sed gemacht.

Code:
from=$(sed -n -e '/^From: /{
s/^From: //
p
}' "$mailbody")
Dabei ist das $(...) dasselbe wie Backquoting, und kennt man normalerweise aus der Korn-Shell. Kann sein, dass ich noch Schreibfehler drin habe, ich habe aber leider keine bash zur Hand, um das auszutesten.

Bei grep ist übrigens das Redirect Input unnötig, weil grep den Filenamen genau wie sed schon als Parameter akzeptiert.