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

2

Eu tenho um terminal com o bash shell.

O terminal tem o sinalizador ICRNL definido (assim, quando o terminal enviar um CR , ele será convertido para LF e, em seguida, o LF será enviado para bash ):

Mas eu fiz um teste que mostrou que bash receberá CR e não LF . Por que isso?

O teste que fiz está executando hexdump em outro terminal e faz com que ele leia o que o primeiro terminal está enviando.

    
por paul 25.05.2017 / 01:30

1 resposta

5

Quando você executa stty -a do prompt do bash, você vê 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, incluindo icrnl (desativado, porque o bash deseja entrada bruta, pois faz seu próprio processamento de entrada). O Bash restaura as configurações originais antes de executar o comando.

Para ver quais são as configurações do terminal no prompt bash, observe qual terminal é este e execute stty 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 …
    
por 25.05.2017 / 02:37