zur Startseite

Druckausgabe von https://privat.albicker.org
Iveco Daily 4x4, Hunde und multithematisches Blog

Hugo und die Krux mit dem Zeilenumbruch

veröffentlicht am 30.10.2023 mit 655 Worten - Lesezeit: 4 Minute(n) in * PROGRAMME * SOFTWARE *

Inhaltsverzeichnis

 

Da hab ich also am Wochenende mein schönes Linux aktualisiert - und dabei kam eine neue Hugo-Version mit. Und weiters arbeite ich an einem Webseitenprojekt mit, das auch von anderen bearbeitet wird.

Dieses Projekt unterscheidet sich von meinen sonstigen Webseiten dadurch, daß auch ich auf die Quelldaten sowohl von Windows-Rechnern als auch von Linux-Rechnern zugreife und diese editiere. Und beim ersten Test nach dem Update scheiterte ein einfaches hugo server mit der Meldung:

Start building sites … 
hugo v0.111.3+extended linux/amd64 BuildDate=2023-03-16T08:41:31Z VendorInfo=debian:0.111.3-1
Error: Error building site: "/home/{benutzername}/Webseiten/{projektname}/content/themen/rababer-faq.en.md:5:40": unmarshal failed: toml: windows new line should be \r\n
Built in 6565 ms

Die Begriffe new line und \r\n lassen mich gleich an die lästigen Unterschiede zwischen DOS/Windows und Unix/Linux beim Zeilenwechsel denken. Aber wie komme ich da weiter?
Im ersten Schritt habe ich in der genannten Datei in Zeile 5 und Spalte 40 (im TOML-Kopf der Seite) den Zeilenumbruch gelöscht und neu erstellt - danach ging’s beim Aufruf des Hugo-Servers weiter … zur nächsten Datei mit derselben Meldung.

Da mußte also eine systematische Lösung her. Diese läßt sich umsetzen mit dem Programm dos2linux (aus dem Debian-Repo mittels apt install auf den Rechner gebracht).

BESCHREIBUNG
Das Paket Dos2unix enthält die Werkzeuge “dos2unix” und “unix2dos” zum Umwandeln einfacher Textdateien aus dem DOS- oder Mac-Format in das Unix-Format und umgekehrt.

In Textdateien unter DOS/Windows sind Zeilenumbrüche, auch als neue Zeile (NL) bekannt, eine Kombination aus zwei Zeichen: einem Wagenrücklauf (Carriage Return, CR) gefolgt von einem Zeilenvorschub (Line Feed, LF). In Unix-Textdateien bestehen Zeilenumbrüche nur aus einem Zeichen, dem Zeilenvorschub (LF). In Mac-Textdateien aus der Zeit vor MacOS X bestand ein Zeilenumbruch aus einem einzelnen CR-Zeichen. Heute verwendet macOS Zeilenumbrüche im Unix-Stil (LF).

(In der allgemeinen Beschreibung fehlt der Hinweis, daß auch “mac2unix” und “unix2mac” Bestandteil des Pakets sind - in den Beispielen der Manpage sind diese aber dargestellt)

Zuerst also eine Analyse:

$ find . -type f -print0 | xargs -0 dos2unix -i
       7       7       0  no_bom    text    ./weihnachtswuensche.md
       0     179       0  no_bom    text    ./wir-ueber-uns/mitglieder.md
       0      84       0  no_bom    text    ./wir-ueber-uns/grundlagen.md
       0      74       0  no_bom    text    ./wir-ueber-uns/grundlagen.en.md
       0     174       0  no_bom    text    ./wir-ueber-uns/mitglieder.en.md
       0      22       0  no_bom    text    ./wir-ueber-uns/kontakt.en.md
       0      19       0  no_bom    text    ./wir-ueber-uns/kontakt.md
       1     109       0  no_bom    text    ./themen/finanzen/artikel1.md
       1      44       0  no_bom    text    ./themen/finanzen/artikel2.md
       9     119       1  no_bom    text    ./themen/finanzen/artikel3.md
      60      44       1  no_bom    text    ./themen/finanzen/artikel4.md
       0      11       0  no_bom    text    ./themen/finanzen/_index.md
       0     110       0  no_bom    text    ./themen/finanzen/artikel1.en.md
       1     192       1  no_bom    text    ./themen/finanzen/artikel2.en.md

Der Befehl listet alle Dateien rekursiv auf ab dem Startverzeichnis - die ersten drei Spalten zeigen dabei die Zeilenumbrüche nach Anzahl der DOS-Zeilenumbrüche, Anzahl der Unix-Zeilenumbrüche, Anzahl der Mac-Zeilenumbrüche auf. Auffällig waren hier in diesem Auszug 3 Dateien, die offenbar Zeilenumbrüche nach dem alten MAC-Standard aufwiesen. Diese wurden zuerst in Angriff genommen:

$ find . -type f -print0 | xargs -0 mac2unix
mac2unix: Datei ./weihnachtswuensche.md wird ins Unix-Format umgewandelt …
mac2unix: Datei ./wir-ueber-uns/mitglieder.md wird ins Unix-Format umgewandelt …
mac2unix: Datei ./wir-ueber-uns/grundlagen.md wird ins Unix-Format umgewandelt …
mac2unix: Datei ./wir-ueber-uns/grundlagen.en.md wird ins Unix-Format umgewandelt …
mac2unix: Datei ./wir-ueber-uns/mitglieder.en.md wird ins Unix-Format umgewandelt …
mac2unix: Datei ./wir-ueber-uns/kontakt.en.md wird ins Unix-Format umgewandelt …
mac2unix: Datei ./wir-ueber-uns/kontakt.md wird ins Unix-Format umgewandelt …
mac2unix: Datei ./themen/finanzen/artikel1.md wird ins Unix-Format umgewandelt …
mac2unix: Datei ./themen/finanzen/artikel2.md wird ins Unix-Format umgewandelt …
mac2unix: Datei ./themen/finanzen/artikel3.md wird ins Unix-Format umgewandelt …
mac2unix: Datei ./themen/finanzen/artikel4.md wird ins Unix-Format umgewandelt …
mac2unix: Datei ./themen/finanzen/_index.md wird ins Unix-Format umgewandelt …
mac2unix: Datei ./themen/finanzen/artikel1.en.md wird ins Unix-Format umgewandelt …
mac2unix: Datei ./themen/finanzen/artikel2.en.md wird ins Unix-Format umgewandelt …

(Achtung: die Originaldateien werden in der Standardeinstellung ohne Rückfrage überschrieben, wer die Originalzeitstempel behalten will, der hänge die Option -k an den Befehl mac2unix an)

Eine Kontrolle mit dem Befehl find . -type f -print0 | xargs -0 dos2unix -i zeigt in der dritten Spalte jetzt überall 0 an.

Ein erster Test von hugo server zeigt: die Webseite wird wieder gerendert!
Offenbar kann der Hugo-Server mit den Windows- und den Linux-Zeilenumbrüchen gleichermaßen umgehen, aber die alten MAC-Umbrüche sind “unverdaulich”.

 


weitere Artikel