Problem mit Shellscript
Guten Abend,
ich habe folgendes Problem:
Ich habe ein ganz kl. Shellscript. Dieses soll mit Hilfe der Suse 9.3 Mail - Funktion eine Datei verschicken!
Shellcript:
Nun erscheint immer der Fehler das die Datei oder das Verzeichnis nicht existiert. Habe den Pfad 10x schon verglichen -> passt. Nun wenn ich das Datum hinten fest eintrage funktioniert es!
Weiß jemand weiter??
Gruß
Dani
ich habe folgendes Problem:
Ich habe ein ganz kl. Shellscript. Dieses soll mit Hilfe der Suse 9.3 Mail - Funktion eine Datei verschicken!
Shellcript:
#!/bin/bash
table=$1
date --universal +%d-%m-%Y >/tmp/tag.var
tag="$(cat /tmp/tag.var)"
rm /tmp/tag.var
mail xx@yy.de -s test -a /test/t-$tag.sh << /root/text #ein < gehört weg
Nun erscheint immer der Fehler das die Datei oder das Verzeichnis nicht existiert. Habe den Pfad 10x schon verglichen -> passt. Nun wenn ich das Datum hinten fest eintrage funktioniert es!
Weiß jemand weiter??
Gruß
Dani
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 28378
Url: https://administrator.de/forum/problem-mit-shellscript-28378.html
Ausgedruckt am: 10.04.2025 um 10:04 Uhr
19 Kommentare
Neuester Kommentar
zum einen, warum schreibst Du nicht einfach:
tag="`date --universal +%d-%m-%Y`"
zum zweiten:
was bezweckt "-a /test/t-$tag.sh"??
Moechtest Du den Inhalt aus /test/t-$tag.sh als Header-Informationen uebergeben? Das geht leider so nicht, denn "-a" liest keine Datei als Parameter ein. Du müsstest den Wert anders übergeben, z.B.
header=`cat /test/t-$tag.sh`
und dann
mail ... -a "$header"
Wenn t-$tag.sh ein Shellscript ist, verstehe ich den sinn nicht ganz.
Gruss
Stefan
tag="`date --universal +%d-%m-%Y`"
zum zweiten:
was bezweckt "-a /test/t-$tag.sh"??
Moechtest Du den Inhalt aus /test/t-$tag.sh als Header-Informationen uebergeben? Das geht leider so nicht, denn "-a" liest keine Datei als Parameter ein. Du müsstest den Wert anders übergeben, z.B.
header=`cat /test/t-$tag.sh`
und dann
mail ... -a "$header"
Wenn t-$tag.sh ein Shellscript ist, verstehe ich den sinn nicht ganz.
Gruss
Stefan
Was für ein "mail" benutzt Du? Gnu Mail hat als Parameter "-a" (und auf diese Weise schon vielfach von mir genutzt:
"GNU mail -- the standard /bin/mail interface
-a, --append=HEADER: VALUE Append given header to the message being sent."
Wenn's bei Deinem Mailer wirklich ein Dateianhang ist:
Probier mal eine erweiterte Version der Datumszuweisung:
anhang="/test/t-`date --universal +%d-%m-%Y`.sql" und dann
mail -s test -a "$anhang" xx@yy.de ...
"GNU mail -- the standard /bin/mail interface
-a, --append=HEADER: VALUE Append given header to the message being sent."
Wenn's bei Deinem Mailer wirklich ein Dateianhang ist:
Probier mal eine erweiterte Version der Datumszuweisung:
anhang="/test/t-`date --universal +%d-%m-%Y`.sql" und dann
mail -s test -a "$anhang" xx@yy.de ...
Erstmal die gute Nachricht, auf meinem Linux laeuft das Script fehlerfrei.
Somit bist du von der Loesung nicht allzuweit entfernt.
Gehen wir zum Debugging ueber, um rauszufinden, wo es bei dir klemmt.
Kannst du mal das Script folgendermassen aufrufen und den output hier posten:
bash -xv script
Somit bist du von der Loesung nicht allzuweit entfernt.
Gehen wir zum Debugging ueber, um rauszufinden, wo es bei dir klemmt.
Kannst du mal das Script folgendermassen aufrufen und den output hier posten:
bash -xv script
#!/bin/bash
table=$1
+ table=
date --universal +%d-%m-%Y >/tmp/tag.var
+ date --universal +%d-%m-%Y
tag="$(cat /tmp/tag.var)"
cat /tmp/tag.var
++ cat /tmp/tag.var
+ tag=17-03-2006
rm /tmp/tag.var
+ rm /tmp/tag.var
mail root -s test -a /tmp/t-$tag.sh < /tmp/text
+ mail root -s test -a /tmp/t-17-03-2006.sh
Bloede Frage, was für ein "mail" benutzt Ihr?? (Die Ausgabe von mail --help würde mir schon helfen). Normalerweise ist es nämlich eine große Bastelei, mit Mail auch Dateianhänge zu übertragen. Meist behelfe ich mir in diesem Fall mit einem PHP-Script. Wäre ja schön, wenn ich zukünftig auf der Shell bleiben könnte.
Tia
Stefan
Tia
Stefan
ITwissen meint, Du sollst Dein Script mal mit der Eingabe von
bash -xv scriptname
aufrufen.
Die Bash führt das Script dann verbose aus, d.h. es werden Informationen beim Ablaufen des Scriptes mit ausgegeben.
Die Zeilen mit dem führenden "+" sind Informationen für Dich, die Dir zeigen, welcher Befehl denn jetzt gerade wirklich ausgeführt wurde, die Variablen werden nicht unter ihren Namen, sondern mit ihren aktuellen Werten ausgegeben.
Das Ganze sollte Dir helfen, den "Fehler" zu orten.
Gruss
Stefan
Und wenn Du mit Deiner Nachfrage meinen Post meintest: Mich interessiert einfach die Ausgabe von "mail --help" auf Deiner Konsole ;)
bash -xv scriptname
aufrufen.
Die Bash führt das Script dann verbose aus, d.h. es werden Informationen beim Ablaufen des Scriptes mit ausgegeben.
Die Zeilen mit dem führenden "+" sind Informationen für Dich, die Dir zeigen, welcher Befehl denn jetzt gerade wirklich ausgeführt wurde, die Variablen werden nicht unter ihren Namen, sondern mit ihren aktuellen Werten ausgegeben.
Das Ganze sollte Dir helfen, den "Fehler" zu orten.
Gruss
Stefan
Und wenn Du mit Deiner Nachfrage meinen Post meintest: Mich interessiert einfach die Ausgabe von "mail --help" auf Deiner Konsole ;)
Momentan fehlt mir da jetzt auch die nächste Idee. Aber das Problem interessiert mich jetzt schon. Ich besorge mir mal eine SuSE 9.3 und stelle das nach. Allerdings kann das noch zwei, drei Tage dauern, da ich morgen nicht am Rechner bin.
Hoffe das reicht aus.
Eine Probiermalkurzaus-Idee wäre noch, am Anfang des Scriptes die PATH-Variable mit allen relevanten Pfaden (sowohl von den Binaries, als auch vom zu mailenden Anhang) zu setzen.
Gruss
Stefan
und poste bitte auch noch einmal die Ausgabe Deines letzten Versuches mit dem "cd ..." vorneweg. Tia
Hoffe das reicht aus.
Eine Probiermalkurzaus-Idee wäre noch, am Anfang des Scriptes die PATH-Variable mit allen relevanten Pfaden (sowohl von den Binaries, als auch vom zu mailenden Anhang) zu setzen.
Gruss
Stefan
und poste bitte auch noch einmal die Ausgabe Deines letzten Versuches mit dem "cd ..." vorneweg. Tia
Ich denke wir sollten uns auf die Datei konzetrieren bei der Fehlersuche.
/var/www/vhosts/hochdorf-tennis.de/backup/mysql/tennis-17.03.06.sql
Du sagst ja, dass die Datei da ist. Das hast du 10x geprueft.
Das einzige was mir dazu noch einfaellt waere, dass der Dateiname vielleicht noch ein Leerzeichen am Ende oder irgendwo ein anderes "unsichtbares" Zeichen drin hat, welches man so nicht gleich sieht?
Was sagt denn:
ls -lb /var/www/vhosts/hochdorf-tennis.de/backup/mysql/tennis-17.03.06.sql
/var/www/vhosts/hochdorf-tennis.de/backup/mysql/tennis-17.03.06.sql
Du sagst ja, dass die Datei da ist. Das hast du 10x geprueft.
Das einzige was mir dazu noch einfaellt waere, dass der Dateiname vielleicht noch ein Leerzeichen am Ende oder irgendwo ein anderes "unsichtbares" Zeichen drin hat, welches man so nicht gleich sieht?
Was sagt denn:
ls -lb /var/www/vhosts/hochdorf-tennis.de/backup/mysql/tennis-17.03.06.sql
Das einzige was mir dazu noch einfaellt
waere, dass der Dateiname vielleicht noch
ein Leerzeichen am Ende oder irgendwo ein
anderes "unsichtbares" Zeichen
drin hat, welches man so nicht gleich sieht?
waere, dass der Dateiname vielleicht noch
ein Leerzeichen am Ende oder irgendwo ein
anderes "unsichtbares" Zeichen
drin hat, welches man so nicht gleich sieht?
Dann wäre ein direkter Aufruf von mail ja auch nicht erfolgreich. An Sonderzeichen hatte ich auch schon gedacht, z.B. wenn beim Füllen der Variablen ein solches erzeugt würde. Aber das ist imho hier nicht der Fall. Probieren könnte man dies mit:
mail xx@yy.de -s test -a /var/www/vhosts/hochdorf-tennis.de/backup/mysql/tennis-`date --universal +%d.%m.%y`.sql
direkt aus der Console aufgerufen.
Gruss
Stefan