Sowohl das cat
als auch das tee
sind nutzlos ; das tee
doppelt so und der Grund für (was Sie als wahrnehmen) das Skript einfriert. Es erfordert ein Dateinamenargument, wie die Datei, in die die Eingabe kopiert werden soll, und einen Text- oder Datenstrom in der Standardeingabe, die natürlich nicht empfangen wird, sodass sie dort abgelegt wird.
Außerdem sollten Sie Ihre Variablen generell zitieren .
Die SENDER
Extraktion ist problematisch. Soll die Variable wirklich zwei Zeichenfolgen enthalten? Normalerweise können Sie einfach formail -rtzxTo: <"$file"
ein gesundes Ergebnis erzielen und erzielen. (Die -t
Option hat etwas undeutliche Semantik, aber aus diesem cut
Grund macht sie wahrscheinlich das Richtige.) Dadurch werden auch die lästigen s beseitigt, nur den E-Mail-Terminus zu erhalten (da dies formail
im Antwortgenerierungsmodus bereits für Sie gilt).
Schließlich sh
erlaubt die Syntax kein Leerzeichen um das Gleichheitszeichen in Zuweisungen.
for file in msg.*; do SENDER=$(formail -zxFrom: -zxReply-To: <"$file" | cut -fs- -d'<'|cut -f1 -d'>') SUBJECT=$(formail -zxSubject: <"$file") if grep -qxis "$SENDER" /home/pi/Mail/.markus; then SENDER2=Markus elif grep -qxis "$SENDER" /home/pi/Mail/.someone; then SENDER2=Someone fi mkdir -p /home/pi/Mail/"$SENDER2" munpack -C /home/pi/Mail/"$SENDER2" "$file" cat "$file" rm "$file" done
Ich habe auch die vollständigen Pfade aus den Befehlsnamen entfernt (Sie sollten PATH
stattdessen sicherstellen, dass Sie gesund sind) und von der `obsolescent`
Prozessersetzungssyntax auf geändert $(modern)
. mkdir -p
läuft leise, also entfernte ich die Ausgabeumleitung davon.
Der Komplex grep
könnte durch ein einfaches Mapping ersetzt werden, etwa wie folgt:
SENDER2=$(awk -v who="$SENDER" ' $1 == who { print $2; x=1 } END { exit 1-x }' <<'________HERE' msmith@dmel.example.com Markus someone@there.example.net Someone ________HERE
Dies macht Vermutungen darüber, was Sie in den Dateien haben, aus denen Sie gerade suchen, aber Sie sollten die Idee bekommen. Dies löst immer noch nicht die Einstellung, SENDER2
wenn der Absender nicht gespeichert ist. Aber vielleicht sollte das Skript diese Dateien aus Sicherheitsgründen ganz ablehnen?