Probleme mit awk...

wunderhorn

wunderhorn

Mitglied
Hallo zusammen,

wir setzen gerade einen HylaFAX-Server auf. Mittlerweile läuft dieser ganz rund. Einzig der SMS-Versand per Mail funktioniert noch nicht. Um dieses Feature einzurichten habe ich hier eine Anleitung gefunden. Diese auch gewissenhaft abgearbeitet. Leider läuft das Skript bei uns nicht richtig.
Code:
SENDPAGE=/usr/bin/sendpage
PAGERPIN=$1
awk '
BEGIN { inhdr=1; MAXCHRS=127 ; SMS = "" }
inhdr==0 { strctr+=length($0)
                if (strctr>MAXCHRS) {
                        print substr(SMS,1,MAXCHRS)
                        exit
                }
                SMS=SMS " " $0
                linectr++; next }
NF>1 && inhdr==1 { if ($1 == "Subject:") {
                SUBJ=$0
                sub("Subject: ","",SUBJ)
                SMS= SUBJ
                next } }
NF>1 && inhdr==1 { if ($1 ~ /[A-Z]..*: ..*$/) inhdr=1; next }
NF>1 && inhdr==1 { if ($1 == "" ) inhdr=1; next }
NF==0 && inhdr==1 { inhdr=0; linectr=0 }
' |  tr -d '\177-\377'  | $SENDPAGE -p $PAGERPIN
Komischerweise ist der Output des Skripts immer leer. ?( Postfix piped in das Skript den folgenden Mail-Datenstrom.
Code:
Received: by faxserver (Postfix, from userid 0)
        id 73FE84B7D; Fri,  1 Feb 2008 08:33:53 +0100 (CET)
To: 01234567890@sms
Subject: Betreff
Message-Id: <20080201073353.73FE84B7D@faxserver>
Date: Fri,  1 Feb 2008 08:33:53 +0100 (CET)
From: root@faxserver (root)

Hier steht der Text, den wir gerne per SMS verschicken moechten.
Ich "wurschtle" jetzt schon seit zwei Tagen an dem Problem rum. Und bin total frustriert, dass ich es nicht hinbekommen. :( Vielleicht sieht ja von euch jemand, wo das Problem liegt.
Über Tips würde ich mich sehr freuen.

Viele Grüße

Christian
 
Was passiert, wenn du das auf STDOUT ausgibst?
Wie sieht der Eintrag in der main.cf aus?
Von welcher Shell reden wir?
Welches OS?
gibt es Fehlermeldungen?

IMHO fehlen hier Klammern.
Code:
NF>1 && inhdr==1 { if ($1 ~ /[A-Z]..*: ..*$/) inhdr=1; next }
NF>1 && inhdr==1 { if ($1 == "" ) inhdr=1; next }
[/code]
Syntax
if (Ausdruck){ command}

Gruß Wolfgang
 
Erledigt: Probleme mit awk...

Hallo Wolfgang,

vielen Dank für die Antwort. Es ging um Hylafax 4.4.0 unter Debian Etch. Die Ausgabe des Skripts war -- ich hatte es geschrieben ;) -- immer leer. Auch wenn ich nicht pipe. Deshalb hatte ich ja auch die Mail-Datei mit hinzugefügt. Eine Fehlermeldung kam auch nicht.

Ich habe am Wochenende noch etwas herumexperimentiert. Und musste feststellen, dass der Autor des Skripts irgendwie die Abbruchbedingung sehr unsauber gesetzt hatte. Das Skript gab nur eine Ausgabe, wenn bestimmte Zeilen länger als 127 Zeilen waren. Und dann war die Ausgabe auch nicht richtig, bzw. nicht so wie erwartet oder gewollt. :(
Ich habe es überarbeitet und gleichzeitig vereinfacht. Sobald ein Betreff gesetzt wird, wird dieser vor den Mailtext gesetzt und mit ":" abgetrennt. Läuft bei uns genial gut. :))
Code:
## Überarbeitetes Skript. Ursprünglich von http://www.hylafax.org/archive/2000-09/msg00347.php
SENDPAGE=/usr/bin/sendpage
PAGERPIN=$1
awk '
BEGIN { inhdr=1; MAXCHRS=127 ; SMS = "" }
inhdr==0 { SMS=SMS " " $0; next }
NF>1 && inhdr==1 { if ($1 == "Subject:") {
                 SUBJ=$0
                 sub("Subject: ","",SUBJ)
                 if ($2 != "") {
                         SMS=SUBJ ":"
                 }
                                 next } }
NF>1 && inhdr==1 { if ($1 ~ /[A-Z]..*: ..*$/) inhdr=1; next }
NF>1 && inhdr==1 { if ($1 == "" ) inhdr=1; next }
NF==0 && inhdr==1 { inhdr=0; linectr=0 }
END {print substr(SMS,1,MAXCHRS) }
' |  tr -d '\177-\377'  | $SENDPAGE -p $PAGERPIN

Das einzige was mich nicht so gefällt, ist das die Umlaute "zerstückelt" werden. Aber da werde ich einen extra Thread aufmachen.

Viele Grüße

Christian

PS. Die ausführlichere Doku deshalb, falls wieder mal jemand den Bug im Skript sucht. ;-)
 
Wenn deine Umlaute nicht richtig dargestellt werden, musst du vorher die richtige Locale setzen.

Gruß Wolfgang
 

Ähnliche Themen

Shellskript - Fehler in Cron

dovecot und postfix Konfiguration Problem

awk skript: Probleme mit if und else Anweisungen

Mail via Terminal will nicht

Festplatte stirbt, dd funktioniert nicht

Zurück
Oben