EMZETT.
Увійти

Переноси рядків: LF і CRLF

Коротко: Windows завершує рядки двома символами (CR+LF), Linux і macOS — одним (LF). Ця різниця раз у раз створює проблеми в скриптах і Git.

Докладніше: CR («Carriage Return», повернення каретки) і LF («Line Feed», переведення рядка) походять від друкарських машинок і телетайпів. Windows зберегла обидва, Unix — лише LF.

Подробиці

  • Симптоми: Shell-скрипт із CRLF падає з bad interpreter: /bin/bash^M. Файли в старих редакторах виглядають однорядковими або показують ^M.
  • Git: core.autocrlf перетворює під час коміту й отримання. Надійніший файл .gitattributes з * text=auto і *.sh text eol=lf.
  • Перетворення: dos2unix і unix2dos, налаштування «кінець рядка» в редакторах.
  • Протоколи: HTTP, SMTP і багато текстових протоколів вимагають CRLF, навіть у Linux.
  • Старі Mac: Раніше лише CR, сьогодні не використовується.
  • Примітка: У текстовому режимі Python кінці рядків під час читання уніфікуються (\n).

Див. також: git rebase