Por que o terminal está enviando um CR mesmo que o ICRNL esteja definido?

Por que o terminal está enviando um CR mesmo que o ICRNL esteja definido?

Eu tenho um terminal com o bashshell.

O terminal tem o ICRNLsinalizador definido (portanto, quando o terminal enviar um CR, ele será traduzido para LFe, em seguida, LFserá enviado para bash):

insira a descrição da imagem aqui

Mas fiz um teste que mostrou que bashvai receber CRe não LF. Por que é que?

O teste que fiz está rodando hexdumpem outro terminal e faz com que ele leia o que o primeiro terminal está enviando.

Responder1

Ao executar stty -aa partir do prompt do bash, você verá as configurações do terminal enquanto o bash não está lendo uma linha de comando.

Quando o bash está lendo uma linha de comando, ele altera algumas configurações do terminal, inclusive icrnl(desativado, porque o bash deseja entrada bruta, pois faz seu próprio processamento de entrada). Bash restaura as configurações originais antes de executar o comando.

Para ver quais são as configurações do terminal no prompt do bash, observe qual terminal é esse e execute sttya partir de outro terminal. Por exemplo:

  1. Em um terminal:

    bash-4.2$ tty
    /dev/pts/3
    bash-4.2$ 
    
  2. Em outro terminal:

    $ stty -a </dev/pts/3
    … -icrnl …
    

informação relacionada