PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : "ambiguous redirect" durch Umlaute



alex23
15-05-2007, 12:59
Hallo erstmal...

ich hab ein mail-Script was anhand eines Namen mehrere Dateien zusammenfügt. Bei normalen Namen, also ohne Umalute, funktioniert auch alles Prima. Nur bei Namen mit einen oder mehr Umlauten kommt immer:


Rößler
./mail.sh: line 27: /tmp/$Name.tcsv: ambiguous redirect
./mail.sh: line 27: /tmp/Rößler.tcsv: ambiguous redirect
Bitte E-mail-Adresse eingeben!

das Scirpt arbeitet dann auch irgendwie, anscheinend sogar richt weiter. Doch irgendwas muss die Meldung ja zu sagen haben, ausserdem kommt beim Versand durch mutt der Name des Dateianhang abhanden. anstatt jetzt zB Rößler.csv kommt ATT58568.txt beim Empfänger an.

hier noch der code des scriptes:

#!/bin/bash

gawk -F';' '{print $2}' listen/liste.csv | sort -u
echo
echo "Bitte betreffenden Person angeben!"
echo
read Name

cat personen/$Name.txt > /tmp/$Name.csv

for i in `grep $Name listen/liste.csv | gawk -F';' '{print $1}'`
do
echo >> /tmp/$Name.csv
echo ";;;$i;" >> /tmp/$Name.csv
echo >> /tmp/$Name.csv
echo "Nachfolgende Personen bitte prüfen:" >> /tmp/$Name.csv
echo >> /tmp/$Name.csv
echo >> /tmp/$Name.csv
sed "s/^/$i;/" raume/$i.txt > /tmp/tmp-$i
cat /tmp/tmp-$i >> /tmp/$Name.tcsv (#Zeile 27)
done

sed "s/_-_/Nachfolgende Personen sind bereits in Gruppen erfasst/" /tmp/$Name.csv >> /tmp/$Name.txt
mv /tmp/$Name.txt /tmp/$Name.csv

echo "Bitte E-mail-Adresse eingeben!"
echo
read email

mutt -s "Rooms of $Name" -a /tmp/$Name.csv $email < text.txt

rm -f /tmp/$Name.*
rm -f /tmp/tmp-*

jan61
16-05-2007, 23:48
Moin,

grundsätzlich: Wenn Du genau wissen willst, was Dein Script so alles tut, dann setze mal ein
set -x an den Anfang. Damit erklärt die Shell Dir alles ;)

Dann noch ein paar Sachen, die mir aufgefallen sind:

Du solltest alle Dateinamen quoten, z. B. so:
echo >> "/tmp/$Name.csv" - damit verhinderst Du, dass die Shell Anstoß an Sonderzeichen nimmt oder sie zu interpretieren versucht (Variablen werden aber ausgewertet).

Dann verstehe ich nicht, wieso Du immer mit Kanonen nach Spatzen schiesst: Warum fährst Du ein Geschütz wie gawk auf, wenn ein
cut -f2 -d";" listen/liste.csv den Job auch erledigen kann?

Auch hier solltest Du quoten:
grep "$Name" listen/liste.csv sonst könnte die Shell, die dem grep die Variable vorlegt (und vorher interpretiert) auch wieder in Versuchung geführt werden.

Ach ja: Ich persönlich würde statt
cat personen/$Name.txt > /tmp/$Name.csv einfach ein
cp "personen/$Name.txt" "/tmp/$Name.csv" machen - oder gibt es einen bestimmten Grund für den cat?

Jan