Essa é uma otimização feita por screen
.
Quando você digita echo<Cr>
em screen
. Devido ao eco local e às configurações icrnl
e onlcr
do dispositivo pseudo-terminal na janela screen
, a sequência \r\n
é enviada para o lado mestre (para a tela).
screen
implementa um emulador de terminal no qual \r
serve para colocar o cursor no início da linha e \n
para mover o cursor para baixo. Para fazer isso, onde um emulador de terminal como o xterm faria chamadas de API X para mover o cursor para o início da linha, screen
tem que enviar códigos de escape para os terminais de host aos quais ele está conectado para informar cursor para o lado esquerdo da janela da tela.
Caso você divida a janela verticalmente, isso significa enviar sequências de escape de posicionamento do cursor para onde quer que o lado esquerdo das janelas da tela esteja. Se não estiver ou no lado esquerdo do terminal do host, screen
passaria esses caracteres \r
e \n
para que o cursor fosse movido para o início da linha e uma linha para baixo no terminal host também (já que todos os terminais tratam \r
e \n
o mesmo nessa instância).
Agora, echo
é executado e gera um caractere \n
. Por causa de onlcr
novamente na janela screen
tty, screen
recebe \r\n
novamente. \r
diz para ir para o início da linha, mas o cursor já está no início da linha, portanto não é necessário fazer nada, e é por isso que o terminal do host não recebe um segundo caractere \r
. Em seguida, para mover o cursor para baixo por causa do \n
que ele recebe, screen
envia \n
para o terminal host.
Você pode verificar isso executando na tela:
printf '\r\r\r\r'
Você notará que screen
envia apenas um % caractere\r
para seu terminal host.