Anzeige:
Ergebnis 1 bis 2 von 2

Thema: "ambiguous redirect" durch Umlaute

  1. #1
    Registrierter Benutzer Avatar von alex23
    Registriert seit
    01.12.2005
    Ort
    Köln
    Beiträge
    11

    "ambiguous redirect" durch Umlaute

    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:

    Code:
    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:
    Code:
    #!/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-*
    woher soll ich wissen was ich denke, bevor ich höre was ich sage?!

  2. #2
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    grundsätzlich: Wenn Du genau wissen willst, was Dein Script so alles tut, dann setze mal ein
    Code:
    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:
    Code:
    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
    Code:
    cut -f2 -d";" listen/liste.csv
    den Job auch erledigen kann?

    Auch hier solltest Du quoten:
    Code:
    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
    Code:
    cat personen/$Name.txt > /tmp/$Name.csv
    einfach ein
    Code:
    cp "personen/$Name.txt" "/tmp/$Name.csv"
    machen - oder gibt es einen bestimmten Grund für den cat?

    Jan

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •