MFBASSIST Geschrieben 23. April 2002 Teilen Geschrieben 23. April 2002 Wie kann ich mit dem Befehl mail dasselbe machen wie folgt... (unten) Will den Befehl in ein Script einbauen. /usr/sbin/uuenview -b -m $MAILTO -s $SUBJECT -a $OUTPUT Danke ! Martin Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schlaubi Geschrieben 23. April 2002 Teilen Geschrieben 23. April 2002 Hi du, ich weiß nicht, ob es dir weiterhilft, ich hab mich mal hingesetzt und so ein Script geschrieben, das Problem an der Geschichte ist, dass ein Script automatisch laufen soll. Was jedoch nicht funktioniert, da du beim senden einer Mail via Kommandozeile ein HUP Signal brauchst, damit die E-Mail automatisch abgeschickt wird. Dies konnte ich nur realisieren, indem ich statt dem interaktiven stdin ($OUTPUT) im als Variable eine Datei gegeben habe. Vielleicht mag mein Script etwas umständlich sein, aber es funzt Naja ich weiß ja nicht, für was du dieses Script verwenden möchtest, aber folgendes Script dient z.B. dazu (wenn du es noch ein bißchen "erweiterst", dass du ein Log automatisch per E-Mail zugeschickt bekommst): ------------------------------------------------------------------- #! /bin/bash MAILTO=user@domain.de SUBJECT="Hier kommt der Betreff" OUTPUT="`cat /Pfad/logfile`" TEST=true if test $TEST = true; then sleep 1 | mail -s "$SUBJECT, $OUTPUT" $MAILTO; echo "please wait for sending E-Mail..."; else exit fi exit ------------------------------------------------------------------- Ist zwar nicht die schönste Lösung, das geht sich auch noch einfacher, aber ich bin auch erst im ersten Lehrjahr :WD so long, cu Schlaubi Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DanielB Geschrieben 23. April 2002 Teilen Geschrieben 23. April 2002 Falls du diesen Befehl aus meinem Script für Dich (das mit dem Directory für nicht leere Verzeichnisse meinst) hast, und nun nach einer Möglichkeit suchst die Ausgabedatei des Scriptes zu mailen kannst du folgendes tun : Ersetze einfach die Zeile mit dem uuenview durch folgendes : mail -s $SUBJECT $MAILTO < $OUTPUT Bei dieser Möglichkeit bekommst Du die Ausgabedatei jedoch im Body der Mail und nicht als Anhang. Da es sich aber um eine Textdatei handelt ist dies nicht wirklich schlimm. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schlaubi Geschrieben 24. April 2002 Teilen Geschrieben 24. April 2002 Ja ich sagte doch dass es eine noch viel einfachere Möglichkeit gibt Naja, versuchs einfach mal mit dem, was dir DanielB vorgeschlagen hat, wenn dir das auch nicht weiterhilft, meld dich. Aber ich denke dass die Frage damit beantwortet sein müsste. so long, cu Schlaubi Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MFBASSIST Geschrieben 30. April 2002 Autor Teilen Geschrieben 30. April 2002 Hier ist mein Script ich weiß jedoch nicht ob das zu umständlich geschrieben ist. Kann mir vielleicht jemand helfen? Danke! Martin #!/bin/sh # Xtrace und Verbose aktivieren zur Fehlerkontrolle set -xv # Standardvariablen definieren EMAIL=`fuchs@bitburg-pruem.de` && `hienz.juergen@bitburg-pruem.de` && `paas.matthias@bitburg-pruem.de` SUB1="KFZ Datenverzeichnis: Es befinden sich in allen Ordnern Dateien" SUB2="KFZ Datenverzeichnis1: Es befinden sich im Ordner ... Dateien" SUB3="KFZ Datenverzeichnis2: Es befinden sich im Ordner ... Dateien" SUB4="KFZ Datenverzeichnis3: Es befinden sich im Ordner ... Dateien" SUB5="KFZ Datenverzeichnis4: Es befinden sich im Ordner ... Dateien" MAIL=`/sbin/mail -s` # Datenstruktur in einer Datei anlegen ls /daten/ | sort > /daten/test/kfzdatendir1 ls /daten/ | sort > /daten/test/kfzdatendir2 ls /daten/ | sort > /daten/test/kfzdatendir3 # Testpfade als Variable TESTPFAD1=`/daten/test/kfzdatendir1` TESTPFAD2=`/daten/test/kfzdatendir2` TESTPFAD3=`/daten/test/kfzdatendir3` # KFZ Datenverzeichnisse auslesen read $TESTPFAD1 read $TESTPFAD2 read $TESTPFAD3 if [ -s $TESTPFAD1 = 1 && -s $TESTPFAD2 = 1 && -s $TESTPFAD3 = 1 ] ; then $MAIL $SUB1 $EMAIL < $kfzdatendir1 && $kfzdatendir2 && $kfzdatendir3 else if [ -s $kfzdatendir1 = 1 ] ; then $MAIL $SUB2 $EMAIL < $kfzdatendir1 else if [ -s $kfzdatendir2 = 1 ] ; then $MAIL $SUB3 $EMAIL < $kfzdatendir2 else if [ -s $kfzdatendir3 = 1 ] ; then $MAIL $SUB4 $EMAIL < $kfzdatendir3 else $MAIL $SUB5 $EMAIL < $kfzdatendir4 fi fi fi fi rm -rf $TESTPFAD1 && $TESTPFAD2 && $TESTPFAD3 exit 0 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schlaubi Geschrieben 4. Mai 2002 Teilen Geschrieben 4. Mai 2002 hmm, funktioniert das Gebilde bei dir überhaupt? Ich habs mal auf meine Bedürfnisse angepasst und bekomms nicht zum laufen. Wieso nimmst du denn nicht das von DanielB und versuchs dass nach deinen Bedürfnissen anzupassen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MFBASSIST Geschrieben 5. Mai 2002 Autor Teilen Geschrieben 5. Mai 2002 Hallo, erstmal danke das hat mir um einiges weitergeholfen. Ich weiß das das Skript nicht funktioniert. Ich wollte ja die Fehlerquelle wissen weil ich keine finde. p.s. an Schlaubi: Das von Daniel hab ich deklariert. Ist eigentlich genau das was er geschrieben hat. MFG Martin Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schlaubi Geschrieben 5. Mai 2002 Teilen Geschrieben 5. Mai 2002 So HAI erstmal ;-) also ich hab hier ein paar mögliche Fehlerquellen für dich..... 1. Mein erstes Prob taucht hier auf: # Standardvariablen definieren EMAIL=`fuchs@bitburg-pruem.de` && `hienz.juergen@bitburg-pruem.de` && `paas.matthias@bitburg-pruem.de` denn er versucht dadurch, dass du diese Zeichen verwendet hast (`) das was darin enthalten ist auszuführen. Und da ne E-Mail addy kein Programm ist, funzt das net. 2. Als zweites Prob taucht hier auf: MAIL=`/sbin/mail -s` du kannst eine Option nicht in eine Variable speichern, ohne einen Parameter dafür anzugeben. Als entweder schreibst du den Subject in Form einer Varible dahinter --> MAIL="`/sbin/mail -s $SUBJECT`" oder du lässt das -s einfach weg, oder noch ein Möglichkeit du schreibst /sbin/mail erst garnicht in eine Variable. 3. Schau nochmal ganz genau nach ob die Pfad angabe in dieser Variable stimmt: # Datenstruktur in einer Datei anlegen ls /daten/ | sort > /daten/test/kfzdatendir1 ls /daten/ | sort > /daten/test/kfzdatendir2 ls /daten/ | sort > /daten/test/kfzdatendir3 denn bist du dir sicher dass daten auf der selben Ebene wie z.B. /etc oder /boot liegt? wenn nicht, dann würde ich einen relativen Pfad angeben z.B. ./daten/....... und das Script muss halt in dem Ordner "." liegen, ich hoffe du verstehst was ich meine? nun dann gibts da noch ein Problem... "ls /daten/" hast du hier dateien drin und willst sie erst sortieren und dann nach /daten/test/ schieben, soweit ist alles klar, aber ich verstehe nicht, warum du es in die Datei "kfzdatendir1", "kfzdatendir2" und "kfzdatendir3" ablegen willst, hier steh ich aufm Schlauch und weiß nicht so recht, was genau du vorhast. :confused: 4. Ich behaupte mal, wenn das Script bis zu der ersten If-Schleife kommt, wird es nicht richtig funzen, denn wegen deiner vorherigen Definierung (# Datenstruktur in einer Datei anlegen ls /daten/ | sort > /daten/test/kfzdatendir1 ls /daten/ | sort > /daten/test/kfzdatendir2 ls /daten/ | sort > /daten/test/kfzdatendir3 ) wird nur immer die erste If-Anweisung ausgeführt, denn es befinden sich immer in jedem Ordner Daten, oder lieg ich da falsch?? 5. Schreib am besten: MAIL="`/sbin/mail`" und dann... if [Anweisung ] ; then $MAIL -s $SUB1 $EMAIL < Body fi So mehr konnte ich bis jetzt nicht finden, falls irgendwas daran falsch ist (von meinem Posting) dann sag einfach bescheid. so long, cYa Schlaubi Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MFBASSIST Geschrieben 5. Mai 2002 Autor Teilen Geschrieben 5. Mai 2002 Hallo Schlaubi, 1. das mit der Email stimmt. Das ich die nicht mit `bezeichnen darf 2. das eine Variable mit Parameter so nicht funktioniert, wusste ich nicht aber ich Sehe dort eigentlich kein Problem und wenn es logisch wäre müsste es trotzdem laufen da es erst in der IF Anweisung + der Variable $Sub ausgeführt wird. 3. Die Pfade stimmen weil das Verzeichnis daten = ein gemountetes Raid System ist und auf der obersten Ebene liegt. 4. Das mit dem ls /daten/ soll für 3 Verzeichnisse sein. Und jedes Verzeichnis hat eine eigene IF Anweisung. So kann man sagen in welchen Verzeichnis Daten liegen und in welchen nicht. 5. Zu 4. das ist es ja. Es befinden sich nicht in jedem Ordner Daten. Die IF Anweisung sieht so aus. Wenn sich in allen Verzeichnissen Daten befinden erfüllt sich die erste Anweisung mit dem ersten $SUB und der ersten Anlage. Ist das nicht der Fall, geht er weiter ins und sucht nicht mehr in allen Verzeichnissen gleichzeitig, sondern durchsucht sie einzeln nach Dateien. Ich schicke nochmal das Script was ich jetzt verändern werde. MFG Martin Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schlaubi Geschrieben 5. Mai 2002 Teilen Geschrieben 5. Mai 2002 oki, dann kucken wir das nochmal gemeinsam durch.... 1. E-Mail is gebonkt. 2. hier hast du auch recht, das war nur die Ausgabe bei "set -x" ;-) aber es würde auch funzen, da es ja erst in der if Anweisung umgebastelt wird, stimmt schon. 3. Gut das sei dann geklärt 5. gut das machen wir zusammen, sobald dein Code hier gepostet ist. cu long, cYa Schlaubi Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MFBASSIST Geschrieben 5. Mai 2002 Autor Teilen Geschrieben 5. Mai 2002 Hallo Schlaubi, du hast doch bestimmt ICQ? Oder? Der Beitrag wir so langsam zu unübersichtlich. Sonst schreib mir mal über ICQ... Gruß Martin UIN: 152492070 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DanielB Geschrieben 5. Mai 2002 Teilen Geschrieben 5. Mai 2002 Die Anweisung if [ -s blub ] ... wird immer ausgeführt sofern das Verzeichnis existiert, also auch wenn dort eigentlich keine weiteren Daten liegen. Des weiteren sind deine If Anweisungen syntaktisch nicht korrekt. Wenn du möchtest, kann mein Script einmal kommentieren und du schaust es dir dann nocheinmal an. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MFBASSIST Geschrieben 6. Mai 2002 Autor Teilen Geschrieben 6. Mai 2002 Hallo, Hier ist nochmal das Skript. Habs ein wenig verändert. Läuft schonmal ohne Fehler durch. Das Problem ist jetzt nur wie bekomme ich die Anführungszeichen in eine Variable? War da nicht was mit Konnektor '.´oder so? Die IF Anweisungen funktionieren wirklich nicht so wie sie sollen. Kannst du mir die dann Kommentieren? :confused: Danke ! Martin ------------------------------------------------------------------------------------ #!/bin/sh # Zur Fehlererkennung aktivieren (Xtrace & Verbose): set -xv # Hier können die Email Adressen eingetragen werden: EMAIL=administrator@bitburg-pruem.de # Hier kann das zu überprüfende Verzeichnis geändert werden: DIR1=/test DIR2=/test/1 DIR3=/test/2 # Anfang des Scripts. Bitte keine Veränderung machen. # Mail Optionen SUB1= '"Es befinden sich in allen Ordnern Dateien"'. SUB2="Es befinden sich Dateien in $DIR1" SUB3="Es befinden sich Dateien in $DIR2" SUB4="Es befinden sich Dateien in $DIR3" MAIL="/bin/mail -s" # Datenstruktur in einer Datei anlegen ls $DIR1 | sort > /tmp/tmpfil1 ls $DIR2 | sort > /tmp/tmpfil2 ls $DIR3 | sort > /tmp/tmpfil3 # Verzeichnis lesbar machen chmod 755 /tmp/tmpfil1 && /tmp/tmpfil2 && /tmp/tmpfil3 # Testpfade als Variable TESTPFAD1=/tmp/tmpfil1 TESTPFAD2=/tmp/tmpfil2 TESTPFAD3=/tmp/tmpfil3 # Anhang in Quelltext OUT1=$TESTPFAD1 && $TESTPFAD2 && $TESTPFAD3 OUT2=$TESTPFAD1 OUT3=$TESTPFAD2 OUT4=$TESTPFAD3 if [ -s $OUT1 ] ; then $MAIL $SUB1 $EMAIL < $OUT1 else if [ -s $OUT2 ] ; then $MAIL $SUB2 $EMAIL < $OUT2 else if [ -s $OUT3 ] ; then $MAIL $SUB3 $EMAIL < $OUT3 else if [ -s $OUT4 ] ; then $MAIL $SUB4 $EMAIL < $OUT4 else echo Keine Daten im Verzeichnis. Ende. fi fi fi fi rm -rf $TESTPFAD1 && $TESTPFAD2 && $TESTPFAD3 exit 0 ------------------------------------------------------------------------------------ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MFBASSIST Geschrieben 6. Mai 2002 Autor Teilen Geschrieben 6. Mai 2002 Ich glaub ich hab die Antwort für die schleife.... if [ -s ${OUT1} > 1 ] && [ -s ${OUT2} > 1 ] && [ -s ${OUT3} > 1 ]; then $MAIL $SUB1 $EMAIL < $OUT1 && $OUT2 && $OUT2 else if [ -s ${OUT1} > 1 ] || [ -s ${OUT2} > 1 ] || [ -s ${OUT3} > 1 ]; then $MAIL $SUB1 $EMAIL < $OUT1 || $MAIL $SUB2 $EMAIL < $OUT2 || $MAIL $SUB3 $EMAIL < $OUT3 else echo Keine Daten im Verzeichnis. Ende. fi fi Würde das funktionieren? MFG Martin Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DanielB Geschrieben 6. Mai 2002 Teilen Geschrieben 6. Mai 2002 Das Problem an deinem Script sind die IF Anweisungen. if -s überprüft nicht wirklich ob ein Verzeichnis Daten enthält, es überprüft lediglich ob das Verzeichnis existiert und größer 0 Byte ist, was bei einem vorhandenen Verzeichnis IMMER der Fall ist. Dieses macht dein komplettes Script recht hmm sinnlos Ich werde noch mal meines posten, mit Kommentaren. #!/bin/bash # Enthält nach Aufruf des Scriptes mit entsprechendem # Parameter das Verzeichnis, dass geprüft werden soll. # Du kannst es natürlich auch fest angeben bzw. um DIR2, etc. # erweitern. DIR=$1 # Enthält nach Aufruf des Scriptes mit entsprechendem # Parameter die Datei in welche die Ausgabe umgeleitet wird. # Auch hier kannst du diese Datei fest definieren, bzw. um # OUTPUT2, etc erweitern. OUTPUT=$2 # Die Mailadresse, an welche die Ausgabe gemailt wird. # Wenn Du mehere Adressen hast, dann schreibe Sie # einfach hier mit rein und bau ne Schleife um den Mailbefehl. # Beispiel am Ende des Postings. MAILTO="foo@bar.com" # Betreff der Mail SUBJECT="Directory Listing of $1" # SIZE enthält die Grösse des Verzeichnises. # Dazu wird mit ls -l ein Listing des Verzeichnises # erzeugt. In der 1. Zeile steht z.B. total 4197. Das head -1 # sorgt dafür, dass nur die erste Zeile weiter an sed gegeben # wird. sed entfernt danach alle alphabetischen #(kleingeschriebenen) Zeichen. # So erhälst du die tatsächliche Grösse aller Dateien in einem # Verzeichnis in der Variable SIZE. SIZE=`ls -l $DIR | head -1 | sed -e 's/[a-z]//g'` # Überprüfung ob SIZE > 0. Wenn ja, mail versenden. if [[ $SIZE -gt 0 ]] then ls -l $DIR > $OUTPUT echo "Directory Listing of $1" | mail -s $SUBJECT $MAILTO < $OUTPUT rm $OUTPUT fi Für mehrere Mailadressen : MAILTO="foo@bar.com [email]bar@foo.com[/email]" for m in $MAILTO do mail -s $SUBJECT $MAILTO < $OUTPUT done Ich hoffe das hilft Dir ein wenig weiter. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MFBASSIST Geschrieben 6. Mai 2002 Autor Teilen Geschrieben 6. Mai 2002 Danke das hilft mir schon weiter. Aber mit der Option -s das funktioniert bei mir. Meinst du mit dem Problem das wenn Verzeichnisse in einem Verzeichnis sind das er dann trotzdem die IF Anweisung durchläuft? Es funktioniert. Blos darf das Verzeichnis was ich dann angebe, keine Unterverzeichnisse haben da sie auch einen Wert erzeugen. Bei Dateien klappt das Prima und die Schleife funktioniert. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MFBASSIST Geschrieben 6. Mai 2002 Autor Teilen Geschrieben 6. Mai 2002 Em das mit dem Subjekt in deinem Skript wird nicht klappen da du keine Anführungszeichen mit nem Konnektor geschrieben hast. Oder muss man das Subjekt nicht in Anführungszeichen schreiben? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MFBASSIST Geschrieben 6. Mai 2002 Autor Teilen Geschrieben 6. Mai 2002 Eine einfachere Lösung wäre vielleicht wenn ich dem ls sagen könnte, dass er nur Dateien und keine Verzeichnisse anzeigen soll. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MFBASSIST Geschrieben 6. Mai 2002 Autor Teilen Geschrieben 6. Mai 2002 Hallo nochmal, Wodran kann es liegen das er bei der Stelle $MAIL $SUB1 $MAILTO < $OUT1 hängen bleib weil er den Inhalt der Dateien ausführen will? Das mit der Option -s funktioniert 100%ig für das was ich vor hab. ls "$DIR"*.* liest dann nur Dateien aus. Also ist es aufjedenfall möglich mit dem Parameter -s. Ich wollte nur Tipps und nicht ein Skript abschreiben :OD hast du nicht eine Lösung für mich wie ich es wenigstens ans laufen bekomme ohne was an der Logik zu ändern? Hier nochmal das Skript in der (neusten) Version *ggg* ------------------------------------------------------------------------------------ #!/bin/sh # Zur Fehlererkennung aktivieren (Xtrace & Verbose): set -xv # Hier können die Email Adressen eingetragen werden: EMAIL="administrator@bitburg-pruem.de" # Hier kann das zu überprüfende Verzeichnis geändert werden: DIR1=/test/ DIR2=/test/1/ DIR3=/test/2/ ####################################################### # # # Anfang des Scripts. Bitte keine Veränderung machen. # # # ####################################################### # Mail Optionen SUB1="Es befinden sich Dateien in $DIR1 $DIR2 $DIR3 !!!" SUB2="Es befinden sich Dateien in $DIR2!!!" SUB3="Es befinden sich Dateien in $DIR3!!!" MAIL="/bin/mail -s" # Datenstruktur in einer Datei anlegen ls "$DIR1"*.* | sort > /tmp/tmpfil1 ls "$DIR2"*.* | sort > /tmp/tmpfil2 ls "$DIR3"*.* | sort > /tmp/tmpfil3 # Verzeichnis lesbar machen chmod 755 /tmp/tmpfil1 && chmod 755 /tmp/tmpfil2 && chmod 755 /tmp/tmpfil3 # Testpfade als Variable OUT1=/tmp/tmpfil1 OUT2=/tmp/tmpfil2 OUT3=/tmp/tmpfil3 if [ -s ${OUT1} > 1 ] && [ -s ${OUT2} > 1 ] && [ -s ${OUT3} > 1 ]; then $MAIL $SUB1 $EMAIL < $OUT1 && $OUT2 && $OUT3 echo 1 elif [ -s ${OUT1} > 1 ]; then $MAIL $SUB2 $EMAIL < $OUT1 echo 2 elif [ -s ${OUT2} > 1 ]; then $MAIL $SUB3 $EMAIL < $OUT2 echo 3 elif [ -s ${OUT3} > 1 ]; then $MAIL $SUB4 $EMAIL < $OUT3 echo 4 else echo "Hmmm alle Verzeichnisse sind leer ;-) !!!" fi ------------------------------------------------------------------------------------ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.