Narzędzia użytkownika

Narzędzia witryny


znaki_nowej_linii

Klątwa znaków końca linii

Pod Windowsami, Unixami (czyli także Linuksem) i na Macach inaczej oznaczany jest znak końca linii w plikach tekstowych:

  • pod Windowsami jest to kombinacja znaków powrotu karetki (\r) i nowej linii (\n);
  • pod Unixami jest to znak nowej linii (\n);
  • na Macach jest to znak powrotu karetki (\r).

[To taka zaszłość historyczna - jeśli pamiętacie maszynę do pisania, to tam aby zacząć pisać w nowej linii trzeba było powrócić głowicą do początku linii (powrót karetki) i przewinąć papier do następnej linii (nowa linia) i zestaw znaków, który pierwotnie opracowano dla dalekopisów (ASCII) zawierał obydwa te „znaki”. Potem tenże zestaw znaków został przejęty w komputerach, tyle że niestety w niejednolity sposób.]

Powoduje to, że kopiując z plików utworzonych pod Windowsami do konsoli putty-ego całą linię wstawiamy tam jeden znak więcej niż potrzeba.

  • Nie musi to niczemu szkodzić - znak powrotu karetki będzie przez większość programów pomijany jako znak niedrukowalny.
  • Ale może, jeśli dany program nie będzie wystarczająco inteligentny, aby je pominąć. W szczególności jak dotąd zdiagnozowano, że (\r oznacza poniżej znak powrotu karetki):
    • Mplus, gdy wydać mu komendę
      mplus plikWe.in plikWy.out\r

      utworzy plik wyjściowy, którego nazwa będzie zawierać znak powrotu karetki. Plik taki będzie potem trudny do manipulowania z poziomu konsoli i niemożliwy do pobrania przez SFTP.

Jak zapobiegać?

Sposobów jest kilka:

  • każdy szanujący się edytor tekstu (uwaga - Notatnik do nich nie należy) umożliwia konwersję pomiędzy windowsowym i unixowym sposobem zapisu znaków końca linii i można z tej funkcji skorzystać;
    • np. w Notpadzie++ opcja ta znajduje się w menu Edycja→Konwersja znaków końca linii
  • wklejając polecenia na konsolę starajmy się nie wklejać znaków końca linii (czyli zaznaczając tekst do skopiowania kończymy zaznaczenie na ostatnim znaku w linii, a nie obejmujemy nim znaku końca linii).

Jak radzić sobie z plikami zawierającymi w nazwie znak powrotu karetki?

Jeśli (np. w sposób opisany w przykładzie z Mplusem powyżej) utworzymy plik zawierający w nazwie znak powrotu karetki, nie będziemy w stanie wykonać na nim żadnej operacji za pośrednictwem programu do przesyłania plików na serwer. W takim wypadku musimy zmienić nazwę pliku z poziomu konsoli, czy to korzystając z komeny mv czy to z Midnight Commandera - patrz operacje na plikach i katalogach na serwerze.

znaki_nowej_linii.txt · ostatnio zmienione: 2013/12/15 14:08 przez zozlak