Aufzucht und Hege von Shell-Scripts: DOS-Dateien

Dateien von anderen Systemen

Das ist eigentlich eine Spezialversion des Eingaben-Abschnitts. Probleme mit Daten, die von anderen Systemen (wie WinDOS oder seltener Mac) kommen, tauchen aber sehr oft in Foren auf, deshalb hier eine Sonderbehandlung. Die häufigste Fehlerursache ist das Zeilenende. Jedes Betriebssystem behandelt Zeilenumbrüche anders, keines kann ohne Hilfsmittel mit den Zeilenenden der anderen Systeme was anfangen:

Verrückt, nicht? Und heutzutage ziemlich überholt, sind das doch eigentlich uralte Fernschreiber-/Schreibmaschinen-Codes: "Linefeed" - ritsch - das Papier wird um eine Zeile nach oben verschoben, "Carriage Return" - ratsch - der Schlitten bewegt sich zurück zum Zeilenanfang. Aber wir müssen halt damit leben.

Wenn Ihr also Eure Shell-Scripts mit Notepad schreibt und Euch nach dem Upload auf den Linux-Server fragt, warum Ihr eine "bad interpreter"-Meldung beim Start seht oder wenn Euer 1000-fach getesteter sed auf dem Zielsystem auf einmal nur Murks produziert, dann solltet Ihr Euch das Format Eurer Scripts oder Dateien mal genauer anschauen. Dafür gibt es z. B. od:

  # so sieht ein Unix-konformes Zeilenende aus
  jan@jack:~/tmp> od -cx crlf_test.sh
  0000000   #   !       /   b   i   n   /   b   a   s   h  \n   2   .
          2123 2f20 6962 2f6e 6162 6873 320a 202e
  # und so ein WinDOS Zeilenende
  jan@jack:~/tmp> od -cx crlf_test.sh
  0000000   #   !       /   b   i   n   /   b   a   s   h  \r  \n   2   .
          2123 2f20 6962 2f6e 6162 6873 0a0d 2e32

Ein einfaches Tool, um solche Fehler zu bereinigen, ist tr:

  tr -d '\r' <crlf_test.sh >crlf_test.sh.bak && mv crlf_test.sh.bak crlf_test.sh