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