O Que É um Fim de Linha? Caracteres de Nova Linha Explicados
Um fim de linha é o caractere invisível, ou os caracteres, que marcam o fim de uma linha de texto em um arquivo.
Toda linha em um arquivo de texto termina com um caractere invisível especial. Qual caractere - ou quais caracteres - depende do sistema operacional, e essa divergência entre Windows e Unix é uma fonte perene de dores de cabeça em CI: scripts que falham misteriosamente, diffs que mostram cada linha como alterada e ferramentas que engasgam com retornos de carro perdidos.
O que é um fim de linha
Um fim de linha é um caractere de controle que diz a um programa onde uma linha para e a próxima começa. Ele é invisível na tela, mas é um byte real no arquivo. Os dois caracteres relevantes são o line feed e o carriage return, e as plataformas os combinam de formas diferentes.
LF, CR e CRLF
Unix, Linux e macOS usam um único line feed (LF). O Windows usa um carriage return seguido de um line feed (CRLF). Sistemas Mac mais antigos usavam um carriage return solitário (CR). O mesmo arquivo de texto tem, portanto, bytes diferentes dependendo de qual plataforma o escreveu.
Por que fins de linha misturados causam problemas
Quando um arquivo escrito no Windows é executado em um runner Unix, o carriage return final vira parte de cada linha. Um shell script então enxerga um caminho de interpretador com um CR invisível anexado e falha. Os diffs incham, e comparações de string não batem por causa de um caractere não visto.
Fins de linha em CI
O CI multiplataforma é onde isso morde mais forte. O Git pode normalizar os fins de linha no checkout via um arquivo .gitattributes, que é a correção mais limpa. Você também pode remover os carriage returns em um job, mas normalizar na origem é mais confiável do que remendar cada script.
# .gitattributes to normalize line endings for CI
* text=auto
*.sh text eol=lf
*.bat text eol=crlfNota Latchkey
A Latchkey oferece runners Linux, Windows e macOS, então o mesmo repositório pode ser feito checkout em plataformas diferentes. Um .gitattributes commitado mantém os fins de linha consistentes não importa qual OS de runner pegue o job.
Principais conclusões
- Um fim de linha é o caractere invisível que marca o fim de uma linha de texto.
- Unix usa LF, Windows usa CRLF, e os Macs antigos usavam CR, então os arquivos diferem por plataforma.
- Fins de linha misturados quebram scripts e diffs em CI multiplataforma - normalize-os com .gitattributes.