Bash Existenz von Dateien mit while und read prüfen

Woodz

Lieutenant
Registriert
Apr. 2009
Beiträge
689
Hallo.

Ich möchte das Vorhandensein von Verzeichnissen prüfen und habe sämtliche Verzeichnisse, deren Existenz ich prüfen möchte, in eine Datei geschrieben. Hier mal ein paar Beispielverzeichnisse:
/opt/
/var/
/etc/

Nun lese ich die Verzeichnisse mit Hilfe einer while Schleife und read ein:
Code:
while read d
do

    if [ -d "$d" ]

        then echo "Vorhanden: $d"

        else echo "Nicht vorhanden: $d"

    fi

done < dir.txt

Obwohl die Verzeichnisse vorhanden sind, liefert mir die Prüfung immer "Nicht vorhanden". Wo liegt hier das Problem?
Ergänzung ()

Ok, offensichtlich lag ein Problem mit der Datei vor. Die Testdatei mit den Verzeichnissen hatte ich in Windows erstellt. Ich weiß nicht welche "unsichtbaren" Zeichen Windows in die Textdatei schmuggelte, aber wenn ich die Verzeichnisse in eine unter Linux erstellt Datei packe, funktioniert die Abfrage.
 
Zuletzt bearbeitet:
Bei mir funktioniert's mit den Pfaden:
Code:
/opt/
/var/
/etc/
/etcc/

Ausgabe:
Code:
$ ./d.sh
Vorhanden: /opt/
Vorhanden: /var/
Vorhanden: /etc/
Nicht vorhanden: /etcc/
 
Hatte ich auch probiert. Gleiches Problem. Wie gesagt, ich habe den Inhalt der Textdatei einfach in eine unter Linux erstellte Textdatei kopiert und es funktioniert. K.A. was das genaue Problem war.

Textdatei unter Windows ist offensichtlich nicht das Gleiche wie unter Linux.
 
Woodz schrieb:
Ich weiß nicht welche "unsichtbaren" Zeichen Windows in die Textdatei schmuggelte
Die Zeilenumbrüche unter Windows sind \r\n und überall anders \n.
Das \r war also zu viel. Kommt übrigens aus der Schreibmaschinenzeit, Windows geht davon aus, dass der Schreibkopf mit \r wieder an den Anfang der Zeile geschoben werden muss. Jaja, Windows, ein modernes System.
 
  • Gefällt mir
Reaktionen: kim88, PHuV und tollertyp
Ok. Das kommt mir bekannt vor. Bin vor kurzem schon einmal über "\r\n" gestolpert. Nur da waren die Zeichen ersichtlich. Ok, danke für die Hilfe.
 
tollertyp schrieb:
Wobei ich die Kritik nicht nur bei Windows sondern auch beim Editor und sogar beim Anwender suchen würde...
Na, was heißt Kritik. Das muss man als Anfänger einmal lernen und gut ist.

Das ist nur eben so ein typisches Windows-Beispiel für "wir machen es anders als alle anderen", das "\r" ist ja nicht nur ne Linux-Geschichte. MacOS (ab X), Unix, BSD und AmigaOS haben das auch. Gut, "\r\n" gab's auch unter CP/M schon, das kam nicht erst mit Windows.
 
@pseudopseudonym: Vor allem gab es vor Windows auch noch DOS...
Und ja, du hast recht, es war keine Kritik. Es war bashing.

Und wenn wir schon die Geschichte behandeln: Bei einer Schreibmaschine wird der Wagen (Carriage) bewegt, nicht der "Schreibkopf". Deshalb wird das Steuerzeichen auch CR genannt für Carriage Return.
 
Zuletzt bearbeitet:
@tollertyp Und was war vor DOS? CP/M, wie ich es erwähnt habe.
An der Stelle bin ich mir nicht mehr sicher: Sind der Schreibkopf und der Wagen bei den alten Schreibmaschinen nicht fest verbunden?
 
Zurück
Oben