Comportamento inesperado de indentação quando defino o terminal no modo bruto - por que isso está acontecendo?

27

Com base no que li, quando um terminal está no modo bruto, os caracteres não são processados ​​pelo driver do terminal, mas são enviados diretamente.

Defino o terminal no modo bruto usando o comando stty rawe notei que a saída é recuada para a direita todas as vezes até que não haja mais espaço. É isso que eu quero dizer:

insira a descrição da imagem aqui

Por que esse comportamento está acontecendo ?!

Paulo
fonte

Respostas:

45

Uma das sttyconfigurações ( onlcr) informa ao driver do terminal para converter a nova linha (que na verdade é alimentação de linha ASCII) em retorno de carro mais alimentação de linha.

Os sistemas tipo Unix apenas escrevem uma nova linha nas linhas finais, permitindo que o driver do terminal faça a coisa certa (converta a nova linha em retorno de carro e alimentação de linha).

O retorno de carro "vai para a esquerda" e o avanço de linha "desce".

Quando você define o terminal para o modo bruto, a nova linha não será mais convertida em retorno de carro mais avanço de linha. Na falta de retorno de carro, você obtém esse efeito de escada .

Thomas Dickey
fonte
e para uma visão detalhada, você pode dar uma olhada em @ stéphane-chazelas post realmente bom: unix.stackexchange.com/questions/151916/… , que mostra muitas coisas interessantes sobre conversões terminais (e seus efeitos colaterais) . Em poucas palavras: apenas "ssh -t" para usar comandos interativos, mas em seus scripts use apenas ssh se desejar obter exatamente o que o comando gerou (por exemplo: arquivos tar criados em um lado de um ssh e lidos / gravados em do outro lado: não adicionar "-t" ou ele poderia (... será?) estragar seus binários)
Olivier Dulac