Переноси рядків: 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