Minha própria resposta, depois de aprender com a resposta e o comentário de icarus :
Você tem que distinguir "uma nova linha em um arquivo" e "uma nova linha em um console". Em um console, a verdadeira nova linha é, contra-intuitivamente, CRLF, como veremos abaixo.
Na convenção do UNIX, em arquivos de texto, LF significa uma nova linha, e vice-versa, você quer dizer uma nova linha de LF. (Por "você quer dizer", quero dizer dizer em um texto em linguagem natural.) Em DOS CR + LF, e assim por diante. Está bem. Todo mundo sabe disso.
O console(Unix) é mais complicado. Primeiro você tem que lembrar que LF e CR são códigos de controle, isto é, podem ser usados para controlar um console, por exemplo. ficando em negrito, cor, etc.
Se você alimentar um LF (\ n, alimentação de linha) em um console, obterá uma nova linha. O problema é que, bem, as duas duas capturas são: (1) os consoles são em camadas duplas, por assim dizer; eles consistem em um filtro e uma parte de renderização. (Nomenclatura ad hoc.) O filtro oculto (para usuários comuns) traduz LF para CRLF. (2) O renderizador precisa de CRLF (\ r \ n) para uma nova linha no sentido comum. Veja abaixo para mais.
O arquivo typescript criado pelo comando script (1)
registra os caracteres após a entrada para o console é filtrada. É por isso que as novas linhas no typescript são CRLF.
Detalhes & misc. fatos:
- O renderizador de console imprime LF como "mover o cursor para baixo uma linha" e CR como "move o cursor para o início da linha".
- Você pode desativar a conversão LF- > CRLF por
$ stty -opost
e apagá-la por$ stty opost
. "opost" é uma abreviação de "Output POSTprocessing".- Mais precisamente,
opost
faz LF- > LFCR quandoonlcr
é definido. Quandoonocr
é definido, o CR será excluído quando no início da linha, etc. Ref: POSIX cap 11 " Interface geral do terminal ".
- Mais precisamente,
- A tecla "Enter" é ligada ao LF no Unix, chamado "Return" na terminologia do mapa de teclado. (Veja esta questão para mais detalhes.)
- Também há variantes de código de escape;
man 4 console_codes
explica que "ESC D" (\ eD) é alimentação de linha e "ESC E" (\ eE) é nova linha. Se você imprimi-los, "ESC D" é um "movimento cursor para baixo", e "ESC E" um CR + LF, independentemente de ± opost-ness.
Para fazer algumas experiências, recomendo escrever em um console separado. Por exemplo, $ echo -ne '1st\n2nd\r\n3rd\n" > /dev/tty1
grava no primeiro console não-X e /dev/pts/0
é o primeiro terminal X. Esta não é a maneira mais conveniente, mas menos ambígua.