Переводы строк: 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